2009-08-25 13 views
11

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 que el usuario haya cerrado la sesión o no. Ahora lo que quiero es que la sesión solo expire cuando un usuario cierra la sesión. Si un usuario no cierra sesión en su cuenta y luego regresa después de 2-3 días, incluso entonces debería aparecer conectado.la sesión nunca debe caducar sola

tengo encontré algunos ejemplos donde 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 forma de escritura para hacerlo?

Respuesta

24

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

  • tener una duración de la sesión no demasiado tiempo: el plazo vencerá si el usuario no está activo (eso es sólo la forma en que 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), utiliza la información contenida en esa cookie para iniciar sesión automáticamente y volver a crear la sesión al mismo tiempo.

esta manera:

  • no tener miles de sesiones "activos" sin una buena razón
  • que mantener las sesiones de forma estándar funcionan

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

También tenga en cuenta que con 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, que es el que establece el tiempo que la cookie debe permanecer en el ordenador del usuario ;-)


Esto significa, sin embargo, que cuando un usuario inicia una sesión de salida de forma manual, usted tiene para eliminar tanto su sesión como la cookie, por supuesto, por lo que no se vuelve a iniciar sesión automáticamente.


Por supuesto, usted tiene que tener cuidado con lo que se propuso en la cookie: una cookie no es muy seguro, así que no almacenar una contraseña en ella, por ejemplo ;-)


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


Si no tiene tiempo para desarrollar ese tipo de cosas, una manera bastante rápida y sucia es utilizar alguna solicitud de Ajax en todas sus páginas, eso simplemente "enviar un ping" a una página de PHP en el servidor - esto mantendrá la sesión activa (pero no es una buena manera de hacer las cosas: todavía tendrá MUCHAS sesiones) en el servidor, tendrás muchas solicitudes inútiles ... y solo funcionará siempre y cuando el usuario no cierre su navegador).

+0

he puesto una cookie con el nombre de usuario y un número aleatorio concatenado a él y luego Lo he almacenado en la base de datos. Cuando se llama a una página, busco la cookie del sistema y la comparo con la de la base de datos si ambas coinciden, entonces visualizo a la persona como iniciada de otra forma no.Y cuando una persona cierra la sesión, establezco la cookie como nula. ¿Es esta la manera correcta? y es esto seguro? – developer

+0

Me parece bien, al menos, nunca será una "seguridad perfecta", ya que cualquiera que use la computadora del tipo se conectará automáticamente, pero eso debería ser suficiente, supongo :-) –

+0

ya entiendo la seguridad problema. Bueno, gracias Martin :-) – developer

0

¿Eliminas tus cookies durante las 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: Quick question about sessions in PHP que explica cómo permanecer conectado. Simplemente no haga una tarea cronjob/sheduled si desea que el usuario permanezca conectado para siempre.

2

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 a los problemas de seguridad, por lo que tendrá que encargarse de muchas cosas. Por favor, lea lo siguiente en la forma de una posible función de auto-iniciar sesión podría estar trabajando:

Cuestiones relacionadas