Parece que usted tiene los fundamentos cubiertos. Sin embargo, si está haciendo todo eso manualmente, entonces simplemente está implementando su propio $_SESSION
, y no aprovecha el hecho de que ya puede hacer todo eso por usted.
Si desea utilizar una base de datos para manejar una sesión, puede anular la gestión de sesión predeterminada con la suya. Eche un vistazo al session_set_save_handler(). Lo hago en mis aplicaciones.
class SessionHandler
{
public function open($save_path, $session_name)
{
$this->sessionName = $session_name;
return(true);
}
public function close() {
//stuff
}
public function read($id) {
$expiretime = date("Y-m-d H:i:s",time() - $this->maxLifeTime);
$sql = "SELECT * FROM sessions where sessionid='".$this->db->escapeData($id)."' AND lastupdated>='".$expiretime."' LIMIT 1";
$result = $this->db->query($sql);
//etc.
}
//etc.
public function setAsSessionHandler()
{
session_set_save_handler(
array($this,'open'),
array($this,'close'),
array($this,'read'),
array($this,'write'),
array($this,'destroy'),
array($this,'gc')
);
}
}
$sessionHandler = new SessionHandler();
$sessionHandler->setAsSessionHandler();
Usted puede tener toda la funcionalidad que acaba de describir que ha implementado mediante el uso de esto, pero todavía tienen el poder de $ _SESSION que lo haga por usted.
Por ejemplo, si desea agregar una comprobación de IP para ver si la sesión sigue siendo válida antes de iniciarla, puede agregarla como parte de la función "abrir". Si quisiera escribir los datos de la sesión en diez bases de datos diferentes (no como lo haría), podría lograr esto en la función 'escribir'.
Esas funciones se usan en función de cómo usa $ _SESSION, y al ponerlas en una clase simple, puede administrar cómo funciona de manera muy efectiva.
Verá que la identificación de la sesión es un parámetro que se pasa a las funciones de lectura/escritura/destrucción, y seguirá administrándolo de la misma forma con la rutina de generación de GUID.Sin embargo, puede pegar la generación de guid y las comprobaciones en esta clase de administrador de sesiones y simplemente hacer que la función abrir() las haga. Centralizado, sin muss, sin complicaciones.
Estás reinventando la rueda de mi amigo –