Resultados 1 al 11 de 11

Tema: Limpiar Cache

  1. #1
    Experimentado
    Avatar de narcosatanico
    Fecha de ingreso
    20 Sep, 06
    Ubicación
    Puerto Montt
    Mensajes
    956

    Limpiar Cache

    Cumpas, estoy desarrollando una aplicación con .Net, c# + asp + oracle, dentro de la aplicación tengo 2 tipos de usuario:
    - Admin: tiene acceso a las páginas a y b
    - usuario: tiene acceso sólo a la pàgina a

    El problema que tengo es q cuando el admin utilizó la página b y cierra su sesión, si el usuario ingresa al sistema puede ver la página b, es decir, ve la última página visitada por el admin.
    Obviamente está malo, pero no sé como borrar el cache del explorador al momento de cerrar la sesión el admin, lo otro es redireccionar a la página a al momento de cerrar sesión pero no lo encuentro muy lógico.

    Alguna ayuda??

    p.d. es visual studio 2005

  2. #2
    Zend Certified Engineer

    Overlord
    Avatar de unreal4u
    Fecha de ingreso
    02 Oct, 05
    Ubicación
    Eindhoven, The Netherlands
    Mensajes
    12,110

    Re: Limpiar Cache

    lo que hago yo es bastante simple, pero efectivo: cada grupo tiene un menú, el cual consiste en link y texto... entonces, si el usuario está visitando una página la cual no aparece en su grupo de menúes disponibles, sale un acceso denegado (lo redirecciono a otra página), de lo contrario, sigue cargando la página.

    Ahora, eso lo hago en PHP, de lo que tenga que ver con Microsoft no tengo idea, pero me imagino que es bastante similar

    Código en PHP que explica el proceso:

    Código PHP:
      $encontrado FALSE;
      foreach(
    $aMenu AS $a
        if (
    array_search($_GET['p'],$a) AND !$encontrado$encontrado TRUE;

      if (!
    in_array($_GET['p'],$clean['permitidos']) AND !$encontrado) {
        
    header('Location: '.HOME.'no-permission');
        exit(
    'Usted no tiene permiso para ver esta p&aacute;gina, y ser&aacute; redirigido. Si no es redirigido, por favor <a href="'.HOME.'no-permission">haga click aqu&iacute;</a>');
      }
      unset(
    $clean['permitidos'],$encontrado,$cadena_grupos);

    donde:
    Código PHP:
    $clean['permitidos'] = array('index','not-found','logout','no-permission','passwd');
    $_GET['p'] = // la página actual
    define('HOME','http://la.pagina.que/contiene-el/home/');
    $aMenu // = arreglo que contiene un listado de todo el menu para ese usuario 
    Saludos !!
    Última edición por unreal4u; 26/03/2010 a las 12:35
    Lee Nuestra FAQ, los famosos 14 mandamientos de CHW.
    El Reglamento de Compra-Venta, Nuestra Visión y por último, Nuestra Historia


    Futurama & The IT Crowd fanboy
    Frase célebre: "Debido a la gran cantidad de guiños y referencias relacionadas con el mundo informático, esta sección permanecerá siempre incompleta, al menos hasta que se complete"
    Para el bronce: Oh, i'm very confortable with my sexuality, i just don't want to be slapped in the face with THEIR sexuality

    Mi blog | Mi Twitter | Zend Certified Engineer

  3. #3
    Experimentado
    Avatar de narcosatanico
    Fecha de ingreso
    20 Sep, 06
    Ubicación
    Puerto Montt
    Mensajes
    956

    Re: Limpiar Cache

    thnks, voy a probar....cuanto extraño php :-(

  4. #4
    omfgzorz!!11!one
    Avatar de dud1n
    Fecha de ingreso
    24 Apr, 06
    Mensajes
    1,611

    Re: Limpiar Cache

    Me pasa lo mismo en vb .net 2005 y aún no lo puedo solucionar
    F . U . C . K .
    Fornication Under Consent of the King


  5. #5
    Pajarito Nuevo
    Fecha de ingreso
    30 Jan, 10
    Mensajes
    66

    Re: Limpiar Cache

    Hola narcosatanico,

    Hace mucho tiempo que no hago nada con ASP, pero creo que había algo como Session.Abandon.

    Entonces lo que yo hacía era:

    1.- En la página login cargaba en la sesión el tipo de usuario desde la tabla de usuarios:

    Session("Perfil")=2

    2.- En cada página reviso si el usuario tenía el perfil mínimo para acceder

    if session("Perfil")<2 then
    response.redirect "accesonoautorizado.asp"
    end if

    3.- En la página logout ponía
    Session.abandon.

    Disculpa no me acuerdo bien de la sintaxis, pero esa es la idea.

    Saludos

    JF

  6. #6
    Guru
    Avatar de Ribosoma
    Fecha de ingreso
    04 Jan, 06
    Ubicación
    Santiago, Chile
    Mensajes
    5,075

    Re: Limpiar Cache

    Cita Iniciado por narcosatanico Ver mensaje
    Cumpas, estoy desarrollando una aplicación con .Net, c# + asp + oracle, dentro de la aplicación tengo 2 tipos de usuario:
    - Admin: tiene acceso a las páginas a y b
    - usuario: tiene acceso sólo a la pàgina a

    El problema que tengo es q cuando el admin utilizó la página b y cierra su sesión, si el usuario ingresa al sistema puede ver la página b, es decir, ve la última página visitada por el admin.
    Obviamente está malo, pero no sé como borrar el cache del explorador al momento de cerrar la sesión el admin, lo otro es redireccionar a la página a al momento de cerrar sesión pero no lo encuentro muy lógico.

    Alguna ayuda??

    p.d. es visual studio 2005
    El tema es que el caché es local al pc, así que realmente no puedes hacer mucho para eliminarlo.

    Estoy suponiendo que el segundo usuario, está entrando usando es caché; y no está realmente solicitando la página al servidor. De modo que ahí está complicado. Si en cambio estás comunicandote con el servidor, tienes problemas con la rutina de deslogeo y deberías revisarla.

    Una forma de evitar eso, sería colocar un código ajax que valide que el usuario esté logeado. Al ser Javascript se va a ejecutar aunque esté en el caché, aunque de todos modos un usuario "malintencionado" igual podría lograr acceder a la página.

  7. #7
    Pajarito Nuevo
    Fecha de ingreso
    30 Jan, 10
    Mensajes
    66

    Re: Limpiar Cache

    Cita Iniciado por Ribosoma Ver mensaje
    El tema es que el caché es local al pc, así que realmente no puedes hacer mucho para eliminarlo.

    Estoy suponiendo que el segundo usuario, está entrando usando es caché; y no está realmente solicitando la página al servidor. De modo que ahí está complicado. Si en cambio estás comunicandote con el servidor, tienes problemas con la rutina de deslogeo y deberías revisarla.

    Una forma de evitar eso, sería colocar un código ajax que valide que el usuario esté logeado. Al ser Javascript se va a ejecutar aunque esté en el caché, aunque de todos modos un usuario "malintencionado" igual podría lograr acceder a la página.

    Si quieres eliminar el caché del usuario... va a ser muy difícil.
    Lo que tienes que hacer es evitar que la página sea "cacheable".

    Para ello debes enviar los headers correspondientes cuando se solicite la página.

    PHP lo tiene listo con session_cache_limiter, pero básicamente lo que hace para que una página no se vaya al caché es enviar los siguiente en el header:

    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache

    En ASP creo que se puede hacer con:

    Response.AddHeader "Expires","Thu, 19 Nov 1981 08:52:00 GMT", etc.

    También hay otros headers específicos para caching (cache-control) pero yo no los he usado porque lo anterior ha sido suficiente.

    Ahora, si estás buscando una solución enterprise-class te recomiendo revisar las soluciones web VPN /SSL que ofrecen un análisis de postura (entiendo que incluso podrían detectar keyloggers en el PC), establece un sandbox cifrado para los cliente, toda la transmisión es encriptada y borran todos los rastros de la sesión en el PC cuando esta termina. Con esto te aseguras 99.999% que no va a quedar rastro en el PC de la sesión.

    Espero te sirva.

    Saludos

    JF

  8. #8
    Zend Certified Engineer

    Overlord
    Avatar de unreal4u
    Fecha de ingreso
    02 Oct, 05
    Ubicación
    Eindhoven, The Netherlands
    Mensajes
    12,110

    Re: Limpiar Cache

    Cita Iniciado por jfroco Ver mensaje
    Si quieres eliminar el caché del usuario... va a ser muy difícil.
    Lo que tienes que hacer es evitar que la página sea "cacheable".

    Para ello debes enviar los headers correspondientes cuando se solicite la página.

    PHP lo tiene listo con session_cache_limiter, pero básicamente lo que hace para que una página no se vaya al caché es enviar los siguiente en el header:

    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache

    En ASP creo que se puede hacer con:

    Response.AddHeader "Expires","Thu, 19 Nov 1981 08:52:00 GMT", etc.

    También hay otros headers específicos para caching (cache-control) pero yo no los he usado porque lo anterior ha sido suficiente.

    Ahora, si estás buscando una solución enterprise-class te recomiendo revisar las soluciones web VPN /SSL que ofrecen un análisis de postura (entiendo que incluso podrían detectar keyloggers en el PC), establece un sandbox cifrado para los cliente, toda la transmisión es encriptada y borran todos los rastros de la sesión en el PC cuando esta termina. Con esto te aseguras 99.999% que no va a quedar rastro en el PC de la sesión.

    Espero te sirva.

    Saludos

    JF
    ojo esternón y otros más:::
    session_cache_limiter y session_cache_expire tienen que ver directamente con el recolector de basura de PHP (que funciona como debería ser a excepción del recolector de ASP y del de Java que realmente da pena), nada tiene que ver con el cliente!

    Limpiar la caché es un poco difícil (metodología "what has been seen can't be unseen"), pero existen así a la rápida 3 métodos para evitar que se crea una caché, y a excepción de una, TODAS involucran cabeceras

    1.- Método más fácil: la caché se guía principalmente por la URL, por lo tanto, cambiando la URL el webserver debería devolver un código 200 en vez del 304. Esto es tan fácil como hacer:
    pagina.asp?i=11111
    y en el siguiente request:
    pagina.asp?i=11112
    Es por este método que en PHP solía existir el SID, que básicamente era la ID de la sesión. Obviamente, después se reemplazó por algo más powa, pq este sistema era muy engorroso.

    2.- Métodos más a prueba de fallos:
    Controlando las cabeceras, se puede evitar la creación de una caché. El primero es ir verificando por el ETag. Sin embargo, creo que ASP no tiene soporte para esto. Esto fue una iniciativa de Apache, por lo que no me extrañaría que IE tampoco tuviera soporte para esto
    Los demás navegadores cuentan todos con soporte para ETags.

    El segundo método que se me ocurre es enviar esto a las cabeceras: (de nuevo en PHP que es lo que manejo):
    Código PHP:
    header('Expires: Tue, 03 Jul 2001 06:00:00 GMT');
    header('Last-Modified: '.gmdate("D, d M Y H:i:s").' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0'false);
    header('Pragma: no-cache'); 
    Si no se colocan todas esas, van a tener problemas con IE5, IE6, IE7 y por último IE8. (En firefox basta con Expires o Cache-Control, tal como recomienda el RFC de las cabeceras, lectura MÁS que recomendado para trabajar con la caché ). IE5 por ejemplo sólo soporta Pragma.
    El otro pajarito complicado es Opera, ese navegador cachea tanto que cuesta hacer las reglas para que no lo haga

    El tercer método via cabeceras consiste en revisar si acaso vienen las cabeceras de IF_MODIFIED_SINCE y/o HTTP_IF_MODIFIED_SINCE y controlar mediante estos si mandar un 200 OK o un 304 Not Modified, aunque este último método (junto con el de ETags) sólo lo recomiendo en caso de archivos estáticos, tales como CSS, JS e imágenes. Para propósitos generales de scripts, recomiendo el segundo método.

    @Ribosoma: caché o no caché es una configuración del webserver (bueno, tb del cliente), el cliente simplemente pide al servidor que se le sirva un documento X el cual tiene fecha de vencimiento de la caché Y. El webserver revisa si Y del cliente es igual al Y que tiene él y si es el mismo, manda un código 304 que el documento NO se ha modificado y el cliente traerá la página desde la caché. En el caso que el servidor tiene una versión más actual, le envía el código 200 y en seguida el documento en su conjunto. Ahora bien, todo cambia cuando se envían cabeceras adicionales, ya que algunas de las cabeceras arriba expuestas le dicen al navegador que NO puede guardar en caché con lo cual no envía las cabeceras adicionales que contiene el campo Y.
    Por último, si es primera vez que se recibe X, el navegador no puede mandar ninguna fecha Y debido a que nunca antes lo ha tenido. En ese caso, el Y del navegador (null) será distinto a la fecha Y que tiene el servidor y devuelve un 200.

    Lee el documento que dejé más arriba que explica todo el proceso que ocurre entre el user-agent y el webserver, te aclarará bastante la película Es largo y difícil de entender, pero yo toi listo para escribir un navegador desde cero

    Saludos !!
    Lee Nuestra FAQ, los famosos 14 mandamientos de CHW.
    El Reglamento de Compra-Venta, Nuestra Visión y por último, Nuestra Historia


    Futurama & The IT Crowd fanboy
    Frase célebre: "Debido a la gran cantidad de guiños y referencias relacionadas con el mundo informático, esta sección permanecerá siempre incompleta, al menos hasta que se complete"
    Para el bronce: Oh, i'm very confortable with my sexuality, i just don't want to be slapped in the face with THEIR sexuality

    Mi blog | Mi Twitter | Zend Certified Engineer

  9. #9
    Pajarito Nuevo
    Fecha de ingreso
    30 Jan, 10
    Mensajes
    66

    Re: Limpiar Cache

    Cita Iniciado por unreal4u Ver mensaje
    ojo esternón y otros más:::
    session_cache_limiter y session_cache_expire tienen que ver directamente con el recolector de basura de PHP (que funciona como debería ser a excepción del recolector de ASP y del de Java que realmente da pena), nada tiene que ver con el cliente!

    Limpiar la caché es un poco difícil (metodología "what has been seen can't be unseen"), pero existen así a la rápida 3 métodos para evitar que se crea una caché, y a excepción de una, TODAS involucran cabeceras

    1.- Método más fácil: la caché se guía principalmente por la URL, por lo tanto, cambiando la URL el webserver debería devolver un código 200 en vez del 304. Esto es tan fácil como hacer:
    pagina.asp?i=11111
    y en el siguiente request:
    pagina.asp?i=11112
    Es por este método que en PHP solía existir el SID, que básicamente era la ID de la sesión. Obviamente, después se reemplazó por algo más powa, pq este sistema era muy engorroso.

    2.- Métodos más a prueba de fallos:
    Controlando las cabeceras, se puede evitar la creación de una caché. El primero es ir verificando por el ETag. Sin embargo, creo que ASP no tiene soporte para esto. Esto fue una iniciativa de Apache, por lo que no me extrañaría que IE tampoco tuviera soporte para esto
    Los demás navegadores cuentan todos con soporte para ETags.

    El segundo método que se me ocurre es enviar esto a las cabeceras: (de nuevo en PHP que es lo que manejo):
    Código PHP:
    header('Expires: Tue, 03 Jul 2001 06:00:00 GMT');
    header('Last-Modified: '.gmdate("D, d M Y H:i:s").' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0'false);
    header('Pragma: no-cache'); 
    Si no se colocan todas esas, van a tener problemas con IE5, IE6, IE7 y por último IE8. (En firefox basta con Expires o Cache-Control, tal como recomienda el RFC de las cabeceras, lectura MÁS que recomendado para trabajar con la caché ). IE5 por ejemplo sólo soporta Pragma.
    El otro pajarito complicado es Opera, ese navegador cachea tanto que cuesta hacer las reglas para que no lo haga

    El tercer método via cabeceras consiste en revisar si acaso vienen las cabeceras de IF_MODIFIED_SINCE y/o HTTP_IF_MODIFIED_SINCE y controlar mediante estos si mandar un 200 OK o un 304 Not Modified, aunque este último método (junto con el de ETags) sólo lo recomiendo en caso de archivos estáticos, tales como CSS, JS e imágenes. Para propósitos generales de scripts, recomiendo el segundo método.

    @Ribosoma: caché o no caché es una configuración del webserver (bueno, tb del cliente), el cliente simplemente pide al servidor que se le sirva un documento X el cual tiene fecha de vencimiento de la caché Y. El webserver revisa si Y del cliente es igual al Y que tiene él y si es el mismo, manda un código 304 que el documento NO se ha modificado y el cliente traerá la página desde la caché. En el caso que el servidor tiene una versión más actual, le envía el código 200 y en seguida el documento en su conjunto. Ahora bien, todo cambia cuando se envían cabeceras adicionales, ya que algunas de las cabeceras arriba expuestas le dicen al navegador que NO puede guardar en caché con lo cual no envía las cabeceras adicionales que contiene el campo Y.
    Por último, si es primera vez que se recibe X, el navegador no puede mandar ninguna fecha Y debido a que nunca antes lo ha tenido. En ese caso, el Y del navegador (null) será distinto a la fecha Y que tiene el servidor y devuelve un 200.

    Lee el documento que dejé más arriba que explica todo el proceso que ocurre entre el user-agent y el webserver, te aclarará bastante la película Es largo y difícil de entender, pero yo toi listo para escribir un navegador desde cero

    Saludos !!
    Hola,

    Revisa la documentación de PHP porque creo que te estás confundiendo: session_cache_limiter sí tiene que ver con el caché cliente y no tiene nada que ver con el recolector de basura.

    PHP: session_cache_limiter - Manual

    "The cache limiter defines which cache control HTTP headers are sent to the client"

    De hecho como bien dije en mi post, para el caso de nocache es equivalente a enviar los headers que como dije antes en mi experiencia son más que suficientes ( el método 2 que pusiste):

    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache


    Sobre el soporte de ASP como también dije está el comando pero yo no lo he probado (Response.AddHeader )

    Saludos

    JF

  10. #10
    Experimentado Avatar de djscorpion
    Fecha de ingreso
    30 Dec, 05
    Mensajes
    516

    Re: Limpiar Cache

    Cita Iniciado por narcosatanico Ver mensaje
    Cumpas, estoy desarrollando una aplicación con .Net, c# + asp + oracle, dentro de la aplicación tengo 2 tipos de usuario:
    - Admin: tiene acceso a las páginas a y b
    - usuario: tiene acceso sólo a la pàgina a

    El problema que tengo es q cuando el admin utilizó la página b y cierra su sesión, si el usuario ingresa al sistema puede ver la página b, es decir, ve la última página visitada por el admin.
    Obviamente está malo, pero no sé como borrar el cache del explorador al momento de cerrar la sesión el admin, lo otro es redireccionar a la página a al momento de cerrar sesión pero no lo encuentro muy lógico.

    Alguna ayuda??

    p.d. es visual studio 2005
    perro yo tengo la solucion ..pero con una condicion:
    que me consigas practica en tu empresa =)..no importa si pagan o no ..
    sale???? vale!!!

    mira ..el asunto de login no pasa por el cache de explorador ni del servidor, ni de los roles etc...
    solo son las cookies....!!!!
    mira... el webconfig tiene esta estructura
    Código:
    <forms 
       name="name" 
       loginUrl="URL" 
       defaultUrl="URL"
       protection="[All|None|Encryption|Validation]"
       timeout="[MM]"
       path="path"
       requireSSL="[true|false]"
       slidingExpiration="[true|false]">
       enableCrossAppRedirects="[true|false]"
       cookieless="[UseUri|UseCookie|AutoDetect|UseDeviceProfile]" 
       domain="domain name">
       <credentials>...</credentials>
    </forms>
    el cual "timeout=" tiene la duracion de la cookie (ej: 1 minuto").
    si haces la prueba,al pasar ese minuto,aunke intentes entrar a una pagina ,te rediccionara automaticamente a la pagina de login...
    entonces..cual es el truco???
    en la pagina de logout,tienes k "sobreescribir esa cookie"(con el nombre k le das en "name="" y agregarle un tiempo pasado..
    ejemplo:
    pagina logout.aspx
    sobreescribes la cookie
    Código:
    HttpCookie addCookie = new HttpCookie("nombre cookie", DateTime.Now.ToString());
    y luego le das un vencimiento pasado
    Código:
    addCookie.Expires = DateTime.Today.AddDays(-1);
    y luego se la envias al servidor
    Código:
    Response.Cookies.Add(addCookie);
    y listo!!!!!

    bueno,aparte igual tienes k matar la sesion y llamar al metodo "FormsAuthentication.SignOut()"

    sis existe respuesta poasitiva positiva de tu parte(sobre la paractica)
    te envio el codigo k tengo en mi casa(ya k ahora estoy macabeando )

    saludos!!

  11. #11
    Experimentado
    Avatar de narcosatanico
    Fecha de ingreso
    20 Sep, 06
    Ubicación
    Puerto Montt
    Mensajes
    956

    Re: Limpiar Cache

    gracias por las respuestas, estoy trabajando en el "problema", a lo que termine les cuento.

Temas similares

  1. [Guía] [GUIA] router + proxy cache + dns caché, + dhcp (Fedora 12)
    Por yakko en el foro GNU/Linux y otros sistemas operativos
    Respuestas: 149
    Último mensaje: 12/03/2014, 23:13
  2. Duda con cache de los CPU y el inferior cache en i7
    Por Type-R en el foro Procesadores
    Respuestas: 3
    Último mensaje: 05/10/2009, 17:12
  3. limpiar pc
    Por emiliodin en el foro Hardware en general
    Respuestas: 9
    Último mensaje: 11/07/2008, 01:22
  4. Respuestas: 6
    Último mensaje: 11/04/2007, 12:15
  5. Limpiar Lcd
    Por Bob Arquitecto en el foro Otro Hardware
    Respuestas: 5
    Último mensaje: 11/08/2006, 02:24

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*