Casi. El archivo (sesión) no se eliminará inmediatamente, que está determinado por session.gc_probability y session.gc_divisor.
No, la sesión se venció, pero la eliminación del archivo de sesión se determina como se indica en el punto anterior
Eso es correcto normalmente, pero si se va a poner en práctica su propio manejador de sesión, podría alterar el comportamiento de caducidad de la sesión incluso de tal manera que se ignora session.gc_maxlifetime
almacenando la sesión en dB no debe alterar esas reglas, pero podría estirarse un poco, si quería.
edición:
Esto es más o menos cómo se puede registrar su propio gestor de sesiones (manejador de ser una clase) y luego hacer lo que quiera con él
En primer lugar, supongamos que tenemos una clase, que va a manejar sesiones para nuestra aplicación.
class MySession {
function open($save_path, $session_name) {
}
function close() {
}
function read($id) {
}
function write($id, $sess_data) {
}
function destroy($id) {
}
function gc($maxlifetime) {
}
}
Para registrar el manejador en php, sólo tiene que llamar session_set_save_handler
función, como este en nuestro caso:
// register the session handler
$sess = new MySession();
session_set_save_handler(array($sess, 'open'),
array($sess, 'close'),
array($sess, 'read'),
array($sess, 'write'),
array($sess, 'destroy'),
array($sess, 'gc'));
Tenga en cuenta que en realidad hay mejores maneras de registrar el manejador de sí mismo, usted podría incluso haz esto en el constructor de tu clase, o de muchas otras maneras. Pero supongo que ese no es el punto aquí.
Lo importante es que aunque PHP le proporciona las variables necesarias que corresponden al comportamiento estándar de su mecanismo de gestión de sesión, no tiene que respetarlo (no es que lo recomiende).
Para responder un comentario a continuación, pasar por alto el parámetro maxlifetime, usted no hace caso de que en el método de GC y el uso lo que consideren necesario/derecha, por ejemplo (con código db pseudo):
function gc($maxlifetime) {
$sql = "DELETE * FROM MySession WHERE lastAccess < NOW()-3600";
// execute the query, say I have PDO instance in $dbh variable
$dbh->execute($sql);
}
Voila, usted simplemente eludió por completo la configuración de la sesión de PHP al hacerlo usted mismo.
Gracias por la respuesta. Una pregunta más: ¿Podría explicar más sobre el punto 3 en su respuesta? Actualmente estoy usando configuraciones predeterminadas para la gestión de sesiones. No tengo control sobre php.ini ya que es un servidor compartido, por lo que no puedo modificar session.gc_maxlifetime. Estoy pensando en usar una base de datos para almacenar sesiones y controlar el tiempo de vida de cada sesión de forma independiente (mediante el uso de una opción para recordarme). – Songo
Gracias por la explicación. Me hiciste feliz :) – Songo