sesiones - session start php
Desactivar sesión después de un tiempo (2)
En lugar de hacer una búsqueda de archivos (que implica más E / S), etc., ¿Qué es una cookie de sesión ?: Cookie de sesión
Una mejor manera es almacenar una marca de tiempo de la ''actividad más reciente'' en la variable $ _SESSION.
Y actualizando los datos de la sesión en cada solicitud (incluidas las llamadas ajax periódicas automatizadas, si las hay).
Digamos que quieres 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 la fijación de sesión : (Fijación de sesión es un ataque que permite a un atacante secuestrar una sesión de usuario válida) siga regenerando la id. De sesión periódicamente durante 5 minutos (sugiero mantener el tiempo de regeneración y el tiempo de expiración de la sesión un poco más). Una lista más elaborada de ataques: lista de ataques.
if (!isset($_SESSION[''CREATED''])) {
$_SESSION[''CREATED''] = time();
}
else if (time() - $_SESSION[''CREATED''] > 600) {
session_regenerate_id(true);
$_SESSION[''CREATED''] = time();
}
Además, asegúrese session.gc-maxlifetime
esté configurado en el tiempo máximo de caducidad que desea usar. Puedes hacerlo
ini_set(''session.gc-maxlifetime'', 600)
O establézcalo directamente en su php.ini.
y también
session.cookie_lifetime especifica el tiempo de vida de la cookie en 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. Si se establece el valor de session.cookie_lifetime en 0, la cookie de la sesión se comportará de la misma forma que una cookie de sesión, es decir, que una cookie de sesión solo será 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! : ¿Cómo expiraré una sesión de PHP después de 30 minutos?
Estoy construyendo un sitio de reserva de boletos 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á a 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?
Las sesiones PHP estándar se almacenan en archivos. Podría implementar un script de shell simple para encontrar cualquier archivo de sesión que no se haya tocado en 10 minutos:
find /path/to/session/dir/* -mmin -10
grep se puede usar para encontrar los archivos de sesión que tienen un valor final_ticket_book = ''N'' almacenado en ellos:
grep -l ''s:17:"final_ticket_book";s:1:"N";''
(the -l flags grep ha escupido los nombres de los archivos que coinciden).
La combinación de los dos te da:
find /path/to/session/dir -mmin -10|xargs grep -l ''s:17:"final_ticket_book";s:1:"N";''|xargs rm -f