leer - read cookie javascript




¿Simular cookies de sesión en sesiones móviles? (4)

Descubrí, para mi asombro a primera vista, que mi pensamiento sobre cómo se comportan las cookies de sesión en dispositivos móviles es rechazado por la realidad.

En los navegadores de escritorio normales, el comportamiento es almacenar una cookie de sesión siempre que la sesión del navegador esté activa. La sesión debe cerrarse, si se cierra la última ventana / proceso del navegador.

Ahora, en los dispositivos móviles, casi nunca se cierra una aplicación del navegador, simplemente la envía al fondo.

Descubrí en mi Sony Xperia Ray con Android 4 que la cookie de sesión no ha caducado, incluso si purgo el proceso del navegador. Pero en un dispositivo Samsung Tablet lo haría. No sé cómo se comportan los dispositivos iOS de esa manera.

¿¡Esto es un problema!? ¿Qué debo hacer para evitarlo?

Por ahora, decidí dejar que la cookie expirara en un día. Pero no estoy muy feliz con eso.
¿Debo bajar la vida útil? ¿Quizás a las 8 horas?


¿Tendría sentido para usted ir por HTML5 y utilizar sessionStorage ?

De esta manera, podría ser independiente de la forma en que los diferentes dispositivos manejan las sesiones del navegador, ya que el almacenamiento de la sesión HTML5 es por ventana, por lo que está limitado a la vida útil de la ventana del navegador.

Básicamente, todos los dispositivos móviles son compatibles con sessionStorage (ver here ) y usted podría tener un marco / complemento como jQuery-Session-Plugin (siga este enlace ) para manejar los datos de la sesión (y proporcionar un respaldo a las cookies de sesión para los navegadores antiguos que no lo hacen). soporte sessionStorage).

EDITAR : Para mostrar el comportamiento de sessionStorage vs. localStorage, he creado un violín que (para fines de demostración) usa sessionStorage para almacenar el ancho de un div y localStorage para almacenar la altura del mismo div:

var randomWidth,
    randomHeight;
if (!(randomWidth= $.session.get("randomWidth"))) {    // assignment
    randomWidth = Math.random() * 300;
    $.session.set("randomWidth", randomWidth, true);
    console.log("just assigned and stored in sessionStorage: randomWidth: " + randomWidth);
} else {
    console.log("from sessionStorage: randomWidth: " + randomWidth);
}
if (!(randomHeight= $.domain.get("randomHeight"))) {    // assignment
    randomHeight = Math.random() * 300;
    $.domain.set("randomHeight", randomHeight, true);
    console.log("just assigned and stored in localStorage: randomHeight: " + randomHeight);
} else {
    console.log("from localStorage: randomHeight: " + randomHeight);
}
$(".test").css({width: randomWidth, height: randomHeight});

Mira la consola. Verá que cuando inicie una nueva sesión en el navegador de su cliente, el ancho variará, mientras que la altura permanecerá igual (porque el almacenamiento local es por dominio).

Aquí está el enlace a jsfiddle


Esta es una sugerencia un poco sucia y de ninguna manera infalible, pero creo que vale la pena mencionarla. Nunca he tenido un teléfono que permanezca conectado a Internet mientras está inactivo (todos se cortan para ahorrar batería) y las redes móviles reciclan las direcciones IP muy rápidamente.

Puede valer la pena almacenar la dirección IP en los datos de la sesión y, quizás en conjunto con una última marca de tiempo visitada , ¿destruir / reiniciar la sesión si la dirección IP cambia?

Obviamente, esto supone que el cliente está conectado a través de la red móvil y no wifi.


Le preguntaría al usuario si quiere recordar la ubicación. Si no se configura el tiempo de expiración de las cookies a los servidores. Le dará al usuario la opción de elegir la experiencia del usuario.

Puede intentar adjuntar al evento onbeforeunload y realizar una publicación en el servidor para modificar el tiempo de caducidad de las cookies o, si la cookie no es segura, elimínela del script java.


Mi solución a un problema similar fue usar document.referrer en combinación con la cookie. Si el usuario está navegando dentro de su sitio, continúe usando la cookie si existe, de lo contrario, expire o reemplace la cookie.

El problema sigue ahí para cuando el usuario coloca el navegador en segundo plano mientras está en su sitio. Si reanudan la navegación y solo usan un enlace en su sitio, la cookie seguirá utilizándose.







weinre