start sesiones pasar paginas manejo guardar entre ejemplos ejemplo datos control php session session-timeout

php - sesiones - la sesión nunca debería caducar sola



pasar variables de session entre paginas php (3)

No puede hacer eso solo con el manejo de la sesión interna de PHP. PHP siempre enviará la identificación de la sesión en una cookie de sesión que caducará cuando el usuario cierre su navegador. Para lograr algún tipo de inicio de sesión automático, necesitará un código adjunto que establezca una cookie más duradera en el navegador del usuario y maneje el reconocimiento de estas cookies y el mapeo entre el valor de las cookies y la respectiva cuenta de usuario.

Tenga en cuenta que esto afecta en gran medida los problemas de seguridad, por lo que tendrá que encargarse de muchas cosas. Lea lo siguiente sobre cómo podría funcionar una posible función de inicio de sesión automático:

Estoy usando la función de inicio de sesión en mi sitio con sesión. Esta sesión mía expira después de unos minutos independientemente de si el usuario se ha desconectado o no. Ahora lo que quiero es que la sesión solo expire cuando un usuario cierre la sesión. Si un usuario no cierra sesión en su cuenta y luego regresa después de 2 o 3 días, incluso entonces debe aparecer conectado.

He encontrado algunos ejemplos en los que han aumentado el tiempo de caducidad de una sesión, pero quiero que solo caduque en el evento de cierre de sesión por parte del usuario, independientemente del tiempo que tardó en cerrar la sesión.

¿¿Cómo puedo hacer eso??

Editar:

session_cache_expire(0); session_start();

¿Es esta la manera de escribir para hacerlo?


Una solución que se usa a menudo, en esta situación, es:

  • tener una duración de sesión no demasiado larga: caducará si el usuario no está activo (así es como funciona, y eso es mejor para su servidor si tiene muchos usuarios)
  • cuando el usuario inicia sesión, configura una cookie que contiene lo que necesita para ser reconocido
  • si regresa al sitio (con la cookie, y sin tener una sesión activa), usa la información contenida en esa cookie para iniciar sesión automáticamente y volver a crear la sesión al mismo tiempo.

De esta manera :

  • no tiene miles de sesiones "activas" sin una buena razón
  • mantienes funcionando las sesiones de manera estándar

Y tiene la ventaja de "nunca estar alojado", al menos desde el punto de vista del usuario.

También tenga en cuenta que con las sesiones "normales", la cookie que contiene la identificación de la sesión se eliminará cuando el usuario cierre su navegador, por lo que se desconectará, sin importar cuánto tiempo dure la sesión.
Con la solución que propongo, usted es quien establece cuánto tiempo debe permanecer la cookie en la computadora del usuario ;-)


Sin embargo, significa que cuando un usuario cierra la sesión manualmente, tiene que eliminar tanto su sesión como la cookie, por supuesto, para que no se vuelva a iniciar sesión automáticamente.


Por supuesto, debes tener cuidado con lo que configuras en la cookie: una cookie no es segura, así que no guardes una contraseña, por ejemplo ;-)


En realidad, esta forma de hacer las cosas es cómo funciona a menudo la función "recordarme"; excepto que aquí, sus usuarios no tendrán que marcar una casilla de verificación para activar "recordarme" ;-)


Si no tienes el tiempo para desarrollar ese tipo de cosas, una forma bastante rápida y sucia es usar alguna solicitud de Ajax en todas tus páginas, que simplemente "ping" una página PHP en el servidor - esto mantendrá el sesión activa (pero no es una buena manera de hacer las cosas: todavía tendrá MUCHAS sesiones en el servidor, tendrá muchas solicitudes inútiles ... y solo funcionará mientras el usuario no lo haga) cierra su navegador).


¿Eliminas tus cookies mientras pruebas? ¿Están habilitadas las cookies? ¿Desorientas la sesión en algún lugar de tu código?

Además, consulte mi respuesta a otra publicación: Pregunta rápida sobre sesiones en PHP que explica cómo permanecer conectado. Simplemente no haga una tarea cronjob / sheduled si desea que el usuario permanezca conectado para siempre.