Estoy construyendo un sitio de reserva de entradas en línea. En esto estoy haciendo lo siguiente: el usuario busca en el bus con sus números de asiento. La base de datos se actualiza con los números de asiento con temp_seat_book = 'Y'
. Si reserva el boleto pagando dinero, su estado se actualizará al final_ticket_book = 'Y'
. Ahora quiero eliminar el campo cuyo temp_seat_book = 'Y'
pero final_ticket_book = 'N'
. Para esto necesito eliminar los session_ids que tienen más de 10 minutos de antigüedad y final_ticket_book = 'N'
. Entonces, ¿cómo puedo implementar el trabajo de fondo?Desactivar sesión después de algún tiempo
Respuesta
En vez de hacer una búsqueda de archivos (que involucra a más de E/S), etc, ¿Qué es una cookie de sesión: Session Cookie
Una mejor manera es almacenar un sello de tiempo de la 'actividad más reciente' en la variable $ _SESSION.
Y actualizando los datos de sesión en cada solicitud (incluidas las llamadas ajax periódicas automatizadas, si las hay).
Digamos que usted quiere desarmar la sesión después de 10 minutos,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
Para evitar ataques como Session fixation: (Fijación de Sesión es un ataque que permite a un atacante secuestrar una sesión de usuario válido) mantener la regeneración la identificación de la sesión dice periódicamente durante 5 minutos (sugiero que se mantenga un poco más el tiempo de regeneración y el tiempo de expiración de la sesión). Una lista más elaborada de ataques: attack list.
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
Además, asegúrese de session.gc-maxlifetime
está ajustado al máximo expira el tiempo que desee utilizar. Usted puede hacer esto
ini_set('session.gc-maxlifetime', 600)
O Conjunto directamente en su php.ini.
y también
session.cookie_lifetime especifica la duración de la cookie en cuestión de segundos que se envía al navegador.
Pero, la destrucción de la sesión debe tenerse en cuenta desde el lado del servidor y no desde el lado del cliente. Al establecer session.cookie_lifetime en 0, la cookie de la sesión se comportaría de la misma manera que una cookie de sesión, es decir, que una cookie de sesión solo es válida hasta que se cierre el navegador.
Aunque este método es un poco tedioso, es más elegante.
¡Ah, encontré el enlace que había leído hace mucho tiempo! : How do I expire a PHP session after 30 minutes?
sesiones de PHP estándar se almacenan en archivos. Se podría implementar un simple script de shell para encontrar cualquier archivo de sesión que no ha sido tocado en 10 minutos:
find /path/to/session/dir/* -mmin -10
grep puede ser usado para encontrar los archivos de sesión que tienen un final_ticket_book = valor 'N' almacenada en ellas :
grep -l 's:17:"final_ticket_book";s:1:"N";'
(the -l flags has grep escupen los nombres de los archivos que coinciden).
combinación de los dos le da:
find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f
- 1. AVAssetWriterInputPixelBufferAdaptor pixelBufferPool va NULL después de algún tiempo
- 2. Android: 4.0.3 emulador se cerró automáticamente después de algún tiempo
- 3. System.Threading.Timer no se activa después de algún tiempo
- 4. Desactivar Avisos Iniciar sesión en mod_auth_sspi_1.0.4-2.2.2
- 5. Desactivar la expansión después de doubleclick
- 6. tiempo(); después de 2038?
- 7. desactivar el tiempo de ejecución datagridviewcombobox
- 8. sesión se pierde después de un inicio de sesión exitoso?
- 9. Configuración del tiempo de espera de la sesión Oracle 11g
- 10. Tiempo de espera de sesión de IIS frente a tiempo de espera de sesión de ASP.NET
- 11. Diseñar redirigir después de iniciar sesión
- 12. ¿Cuánto tiempo durará mi sesión?
- 13. eliminar archivos de sesión después de un tiempo desde la creación
- 14. Botón back de CodeIgniter después de cerrar sesión
- 15. Por qué mi Netbeans Xdebug agota el tiempo de espera de la sesión después del período de inactividad
- 16. Desactivar cuenta debido al inicio de sesión 3 veces fallido
- 17. Los usuarios que han iniciado sesión se desconectan después de un tiempo
- 18. redirección después de iniciar sesión: Web.config
- 19. Flecha atrás después de cerrar sesión
- 20. Retiro UncaughtExceptionHandler Excepción después de iniciar sesión
- 21. ¿Redirigir después del inicio de sesión?
- 22. Redirigir después de iniciar sesión con Devise
- 23. asp.net mvc sesión de tiempo de espera
- 24. Tiempo de espera de sesión en ASP.NET
- 25. Incremente el tiempo de la sesión php
- 26. ¿Por qué deberíamos hacer que los enlaces de activación de cuenta/restablecimiento de contraseña caduquen después de algún tiempo?
- 27. System.Windows.Media.DrawingVisual.RenderOpen() error después de un tiempo
- 28. Jboss se ralentiza después de un tiempo
- 29. Zend Framework Cierre de sesión automático después de la inactividad
- 30. Con jQuery, ¿cómo puedo desactivar y desactivar una página web y luego mostrar algún tipo de spinner sobre eso?
simplemente una marca de tiempo y comprobar que funciona? – footy
no sería más sencillo un campo de base de datos de 'seat_status' con uno de los 3 estados. –
puede encontró su respuesta aquí http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes –