aramirez.es

Alberto Ramírez Website


11 de febrero de 2009

Garbage Collector: eliminar sesiones antiguas de la base de datos

0 comentarios >>

Normalmente, cuando hago el análisis de la base de datos para un proyecto nuevo, incorporo una tabla que será la encargada de gestionar las sesiones de los usuarios de la web. Cuando el proyecto va a constar de aplicación frontend y aplicación backend intento separar sus sesiones en tablas diferentes: public_sesion_db y private_sesion_db.

La estructura de estas tablas es la siguiente:

id: varchar(40)

data: text

time: datetime

La clase que uso en los proyectos symfony para la gestión de las sesiones es sfMySQLSessionStorage. Para cerciorarnos de que las tablas de sesiones no almacenan datos de por vida, y así­ asegurarnos de no tener problemas con las id's (que estas no se pisen, o sean leidas de forma incorrecta), la clase incorpora un mí©todo llamado sessionGC que ejecuta la siguiente consulta SQL:

'DELETE FROM '.$db_table.' '.'WHERE '.$db_time_col.' + INTERVAL '.$lifetime.' SECOND < NOW()' donde:

  • $db_table es la tabla que almacena las sesiones (en etse caso será public_sesion_db o private_sesion_db).
  • $db_time_col es la columna que almacena la fecha de la sesion (time).
  • $lifetime es un parámetro que recibe el mí©todo sessionGC que se encarga de decirle, el tiempo máximo permitido de una sesión.

¿ Cuándo se llama a este mí©todo ?

Este mí©todo es llamado mediante una probabilidad (que se calcula a partir de unos parámetros configurados en el archivo php.ini del servidor) que se aplica a cada visita a la web, es decir, por cada petición que se hace a la web se decide si se llama al recolector de basura (depende de la probabilidad).

Los parámetros encargados de calcular esa probabilidad son:

  • session.gc_probability (que por defecto en una instalación MAMP tiene el valor 1)
  • session.gc_divisor (cuyo valor por defecto es 100)

la probabilidad es session.gc_probability / session.gc_divisor. El valor del divisor ha de ser modificado en función del número de usuarios de la web, para que se llame un par de veces diarias al mí©todo sessionGC.

Tags: | |


Comentarios


No existen comentarios


Deja tu comentario

zukeidigital 2008