una tiempo sesiones sesion por navegador inactividad especifica eliminar destruir cerrar caducar boton php session timeout observer-pattern

tiempo - php eliminar cookies cerrar sesion



patrón de observador php para cerrar la sesión del usuario cuando la sesión se agota (6)

¿Por qué quieres hacer esto? El enfoque común es verificar cada solicitud enviada por el usuario si el tiempo de espera ha expirado. Por supuesto, eso significa que el estado en su base de datos no está actualizado, porque el usuario aún se muestra como conectado, incluso aunque se haya alcanzado el tiempo de espera.

Pero para fines prácticos eso generalmente no importa.

Estoy intentando registrar a los usuarios cuando ocurre el tiempo de espera de la sesión del usuario. Cerrar la sesión de los usuarios, en mi caso, requiere modificar el estado "en línea" del usuario en una base de datos.
Estaba pensando que podría usar el patrón del observador para hacer algo que monitorearía el estado de la sesión del usuario y desencadenaría una devolución de llamada cuando la sesión caduque, lo que preservaría el nombre del usuario para que podamos actualizar el db. No estoy seguro de por dónde empezar en el lado de la sesión. ¿Puedo vincular una devolución de llamada al tiempo de espera de la sesión?

¿Están estas cosas integradas en cualquier paquete de sesión pera o zend disponible? ¡Usaré lo que sea necesario para que esto suceda!



ACTUALIZACIÓN @ 16:33:
¿Qué ocurre si tienes un sistema donde los usuarios pueden interactuar entre ellos (pero solo pueden interactuar con usuarios en línea)? El usuario necesita saber qué otros usuarios están en línea actualmente.

Si simplemente verificamos si la sesión aún está activa en cada actualización de la página, luego de un tiempo de espera, el usuario es enviado a una página que no está iniciada, pero todavía aparecen como en línea en el sistema.

Ese método estaría bien, excepto que cuando terminamos el tiempo de la sesión, perdemos la información sobre el usuario que podría usarse para cerrarla.



ACTUALIZACIÓN @ 16: 56:
derecho. Gracias. Estoy de acuerdo ... algo feo. Ya tengo un poco de votación lenta del servidor, por lo que sería bastante fácil implementar ese método. Simplemente parece una característica tan útil para un paquete de manejo de sesión. Zend y PEAR tienen paquetes de sesión.


Cada vez que un usuario golpea una página, marque esa hora en la base de datos, llame a esta columna LastAccessed. Cuando el usuario hace clic en la parte de Logout de su sitio, puede establecer este valor como nulo. Al escribir su consulta para encontrar una lista de usuarios que están actualmente conectados, haga lo siguiente:

SELECT * FROM Users WHERE LoggedIn=1 AND LastAccess > DATEADD(Minute,-20.GETDATE())

Lo que devolvería a los usuarios que todavía tienen una sesión activa. Perdonen el SQL que probablemente no funcione con MySQL / PHP, pero esto debería darle una idea general.



Sé que esta podría ser una pregunta anterior, pero la "mejor" respuesta a su pregunta se encuentra aquí: http://www.codeguru.com/forum/archive/index.php/t-372050.html

Esto es lo que dice: El archivo php.ini contiene una configuración llamada sesison.save_path, esto determina dónde PHP coloca los archivos que contienen los datos de la sesión. Una vez que una sesión se ha quedado obsoleta, será eliminada por PHP durante la próxima recolección de basura. Por lo tanto, una prueba para la presencia de un fiel para esa sesión debería ser adecuada para determinar si la sesión todavía es válida.

$session_id = ''session_id''; $save_path = ini_get(''session.save_path''); if (! $save_path) { $save_path = ''.''; // if this vlaue is blank, it defaults to the current directory } if (! file_exists($save_path . ''/sess_'' $session_id)) { unlink($session_id); // or whatever your file is called }


Sugerencia fea pero quizás viable:

Agregue un solicitante asincrónico keep-alive a las páginas, que actualice su última marca de tiempo activa. A continuación, puede tener un trabajo cron que marque a los usuarios como desconectados si tienen una marca de tiempo de última actividad de más de 20 segundos de antigüedad. Establecer ese trabajo cron para ejecutar cada minuto haría el truco. No estoy seguro de que exista una forma de activar algo cuando el tiempo de espera de la sesión de un usuario finaliza o cierra su navegador.


Tome el caso más simple primero. Supongamos que tiene 1 usuario en su sistema y desea que se agote el tiempo de espera de la sesión, y desea que se informe con precisión sobre su estado. El usuario no ha visitado una página en 12 minutos y el tiempo de espera de la sesión se establece en 10 minutos. Una de dos cosas sucederá. O visitarán nuevamente en poco tiempo, o no lo harán. Si no vuelven a visitar, ¿cómo ejecutará el sistema el código para actualizar su estado de tiempo de espera? La única forma * es tener un proceso separado para iniciar una función de actualización de estado para todos los usuarios que se encuentran actualmente en estado "en sesión".

Cada vez que un usuario visita su sitio, actualice una variable en la base de datos que relaciona su sesión con la última hora accedida. Luego crea un trabajo cron que se ejecuta cada minuto. Llama a una función simple para verificar los estados de la sesión. Cualquier sesión anterior al período de tiempo de espera se establece en estado "tiempo de espera agotado". (También debe limpiar la mesa después de que las sesiones de tiempo de espera hayan permanecido un tiempo). Si alguna vez desea un informe sobre el número de personas que iniciaron sesión, busque todos los registros que tengan una última hora de acceso más tarde que el intervalo de tiempo de espera de inicio.

"*" Hay otras formas, pero a los efectos de una simple aplicación web, no es realmente necesario. Si tiene algo más complejo que una simple aplicación web, actualice su pregunta para reflejar la necesidad específica.