read leer google ejemplos definir cookie _gid javascript jquery mobile cookies weinre

javascript - leer - ¿Simular cookies de sesión en sesiones móviles?



leer cookie javascript (5)

¿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

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?


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.


Este problema no se limita a los dispositivos móviles. Las cookies de sesión pueden durar "para siempre" también en un navegador de escritorio, si un usuario elige constantemente "restaurar la sesión anterior" (aprendí esto de la manera más difícil).

Una solución del lado del cliente para limitar las sesiones a un día es la siguiente:

Establecer dos cookies:

  • una cookie de sesión (navegador), y
  • una cookie que caduca en medio de la noche del usuario (por ejemplo, a las 4 am o 5 am), entre, por ejemplo, 2 horas y 26 horas desde que se establece (en general, debe expirar en una ventana por cierto. x y x + 24 horas)

Si falta ALGUNA cookie, inicie una nueva sesión y reinicie ambas.

Para configurar la segunda cookie, puede hacer uso de Date.getTimezoneOffset() . Alternativamente, si puede geolocalizar al usuario de manera confiable para que tenga al menos una estimación aproximada de su longitud, puede usar la longitud para calcular cuándo se espera que la "mitad de la noche del usuario" sea (1 hora es 15 grados de longitud). Dos posibilidades son: por dirección IP (saber que el país puede no ser suficiente, sin embargo: en países como los EE. UU. Necesita al menos el nivel estatal), o mediante el uso de la información proporcionada por el CDN, si usa uno.

Tenga en cuenta que si algo DEBE expirar después de un tiempo (por ejemplo, una sesión en el servidor), entonces no puede confiar en las cookies, también debe verificar la caducidad del servidor.


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.