pwa para apps app iphone web-applications mobile-safari iphone-standalone-web-app

para - iPhone "Marcador a la pantalla de inicio" elimina las cookies y la sesión?



service worker ios (4)

Hay almacenamiento persistente de valores-clave y de bases de datos disponibles para aplicaciones web. Puede guardar sus datos de autenticación utilizando el objeto localStorage y usar XMLHttpRequest para enviarlos al servidor. Otra opción es guardar sus datos persistentes en una base de datos SQLite, sin embargo, esta no parece ser una solución adecuada en su caso. Consulte la Guía de programación de aplicaciones externas y de almacenamiento del lado del cliente de Apple para obtener detalles / ejemplos.

En este momento estoy desarrollando una aplicación basada en la web, donde el usuario tiene que iniciar sesión primero.

Cuando abro la página en iPhone Safari, inicio de sesión y reinicio de Safari, sigo conectado (la ID de cookie y sesión aún está configurada).

Pero cuando agrego esta página con "Agregar a pantalla de inicio", cada vez que hago clic en el icono de esa página, tengo que volver a iniciar sesión.

No encontré ninguna información sobre eso. ¿Qué puedo hacer para que mis usuarios puedan configurar esta página en su pantalla de inicio como icono y aún así no tengan que iniciar sesión cada vez que la abran?


Hay una solución más fácil y más elegante que la de favo.

Al menos en iOS 4.2.1, 5.1.1, 6.0 y 6.1 (no pude probar otras versiones), si extiende la vida de su cookie de sesión manualmente, Safari se aferrará a la cookie de sesión e incluso permitirá compartir el sesión entre la versión ''de la pantalla de inicio instalada'' de su aplicación web y las visitas normales a través de Safari.

El truco es hacer esto:

// Start or resume session session_start(); // Extend cookie life time by an amount of your liking $cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds setcookie(session_name(),session_id(),time()+$cookieLifetime);

Para una discusión más elaborada de esta estrategia, puede echar un vistazo a mi respuesta a esta pregunta:

Mantener sesión de PHP en la aplicación web en iPhone


Un enfoque realmente simple podría ser el uso de un token único en su marcador-URL que puede servirle como identificador de dispositivo único.

Ejemplo: http://myWebApp.com/?token=randomId29238/1

El token se puede generar en el lado del servidor al momento de abrir la aplicación en Mobile Safari y antes de que se le solicite al usuario la información de "Agregar a pantalla de inicio". El token se puede agregar a la URL usando un redireccionamiento rápido (... & token = randomToken) o un hash de ubicación (... # randomToken).

Cuando el Marcador ahora se abre desde la pantalla de inicio, el token se envía a su servidor y puede identificar la sesión activa del usuario. También puede usar el token como identificación de sesión permanente, pero desaconsejo eso debido a problemas de seguridad.

Para permitir futuros procedimientos de inicio de sesión e inicio de sesión, siempre puede asignar las nuevas sesiones al token.

El token lo servirá como un identificador de dispositivo único cada vez que el usuario vuelva a abrir su enlace desde su pantalla de inicio.


Voy a ampliar un poco más la respuesta de Waldo Baggins.

Cuando me encontré con esto, descubrí que la razón por la que esto sucedía era que las cookies de sesión establecidas en el servidor generalmente no tienen un valor de caducidad establecido. El comportamiento predeterminado en este caso es que el navegador descarte la cookie cuando el navegador se cierra / se vuelve a abrir. Dado que el navegador no reenvía la cookie al volver a abrir, el servidor no tiene forma de identificar la sesión, incluso si todavía no ha expirado en el servidor, y por lo tanto, su usuario se redirige a la página de inicio de sesión.

Cuando el usuario usa su sitio en el modo de aplicación web (icono agregado a la pantalla de inicio), iOS trata de navegar hacia / desde la aplicación de la misma manera que una computadora de escritorio trataría el cierre y la reapertura del navegador, y pierde la sesión cuando se vuelve a abrir.

Entonces, siguiendo la sugerencia de Wilbo y estableciendo un tiempo de vencimiento para la cookie, iOS comprueba si la cookie ha caducado cuando el usuario navega de regreso a su aplicación, y si no lo ha hecho, reenvía la cookie, manteniendo así la sesión. El valor de 1 año en la respuesta de Wilbo es ridículamente largo; por lo general, debería establecerlo en 8 o 24 horas, e idealmente sincronizarlo con el valor de tiempo de espera de caducidad de la sesión que ha establecido en el servidor.

Tenga en cuenta que, como efecto colateral, cuando se accede a su sitio desde un navegador de escritorio, y el usuario cierra y vuelve a abrir el navegador, la sesión continuará persistiendo y el usuario aún podrá iniciar sesión, lo que no habría sido el caso previamente (a menos que estuvieran navegando en privado). Su función "Cerrar sesión" debería manejar adecuadamente el vencimiento de esta cookie.

Para una aplicación web Java que usa la versión 3.0 de web.xml o superior, la manera más fácil de hacerlo es modificar <session-config> siguiente manera:

<session-config> <session-timeout>600</session-timeout> <!-- In minutes --> <cookie-config> <http-only>true</http-only> <secure>true</secure> <max-age>36000</max-age> <!-- In seconds --> </cookie-config> </session-config>