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

Tengo una aplicación web móvil jquery. En mi iPhone cuando estoy en la aplicación web, tengo un inicio de sesión y variables de sesión. Si salgo de la aplicación para ir a otra ubicación en el teléfono y luego regreso a la aplicación web, debo volver a iniciar sesión. Parece que la sesión no se mantiene. Además, si tengo un enlace externo y abre Safari para ese enlace, esa misma sesión no se transfiere a la ventana de safari. ¿Hay alguna manera de mantener la sesión?

Supongo que te estás refiriendo a las “aplicaciones web” con metatags de “capacidad de pantalla completa” de Apple. Existen en una caja de arena, por lo que no, los datos de la sesión no se mantendrán.

La respuesta aceptada para esta pregunta es incorrecta, esto es fácil de hacer.

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); 

¡Eso es! No se requiere ningún manifiesto de caché local y puede trabajar con sesiones en su aplicación web como lo haría con las páginas web en un escritorio normal o un navegador móvil. Probé en iPhone 5 (iOS 6.1) y iPhone Simulator / iPad 2 (ambos iOS 6.0) y esto funcionó incluso al apagar y reiniciar el dispositivo / simulador durante la sesión.

Funciona muy bien: la cookie de sesión resultante se comparte entre varias instancias de la aplicación web si un usuario agrega su aplicación web a la pantalla de inicio varias veces, y a menos que el modo de navegación privada de Safari esté activado, la cookie de sesión estará disponible cuando navegue. a su página web directamente desde Safari en lugar de usar la aplicación web. Por lo tanto, no importa cómo se acerque el usuario a su aplicación, la sesión actual siempre parece restaurada al usar esta estrategia.

Para probarlo usted mismo, use el código anterior y session_id() salir session_id() en su página web ( temporalmente, ya que es un riesgo de seguridad ) y vea si cambia entre cerrar y abrir su aplicación web desde la pantalla de inicio (intente reiniciar su dispositivo durante la sesión también). Si el ID de sesión generado no cambia, funciona: aparentemente está siendo almacenado en algún caché local (compartido) por Safari.

Probado y confirmado para funcionar bajo iOS 4.2.1, 5.1.1, 6.0 y 6.1.

Descargo de responsabilidad: la documentación de Apple establece explícitamente la necesidad de un manifiesto de caché local para guardar datos localmente en una aplicación web, pero esta solución funciona sin eso. Es decir, esta solución puede depender del comportamiento indocumentado o con errores de Mobile Safari. Sin embargo, dado que funciona en muchas versiones de iOS, tengo la impresión de que se trata de un comportamiento intencionado (al menos por parte de Apple), documentado de manera poco clara.

Si no desea abrir Safari al hacer clic en un enlace, simplemente use este git.

https://gist.github.com/kylebarrow/1042026

Básicamente solo copie el archivo stay_standalone.js a su proyecto y en sus vistas incluya esta línea:

  

Si no puede utilizar cookies, debe crear una sesión en su servidor, pero durará hasta que el usuario use la misma dirección IP o la hora en que su servidor esté configurado para las sesiones, eso significa que el usuario cambiará 3g por WiFi. la aplicación detectará que hay una dirección IP diferente, por lo que la sesión se cerrará.