Para implementar el almacenamiento en bases de datos, o cualquier otro método de almacenamiento, se necesita usar session_set_save_handler() para crear un conjunto de funciones de almacenamiento a nivel de ususario. A partir de PHP 5.4.0 se pueden crear gestores de sesiones usando la clase SessionHandlerInterface o extendiendo los gestores internos de PHP heredando de la clase SessionHandler.
   Las llamadas de retorno especificadas en session_set_save_handler() son métodos
   llamados por PHP durante el ciclo de vida de una sesión: open, read,
   write y close, y para las tareas domésticas:
   destroy para borrar una sesión y gc para la recoleción periódica
   de basura.
  
   Por lo tanto, PHP siempre necesita gestores de almacenamiento de sesiones. El predeterminado normalmente es el
   gestor de almacenamiento interno 'files'. Se puede establecer un gestor de almacenamiento personalizado usando
   session_set_save_handler(). Se pueden porporcionar de forma alternativa gestores de almacenamiento
   interno mediante extensiones de PHP, tales como sqlite,
   memcache y memcached y pueden establecerse con
   session.save_handler.
  
   Cuando se inicia la sesión, PHP llamará internamente al gestor open seguido de
   la llamada de retorno read la cual debería devolver una cadena codificada exactamente como si fuera
   pasada originalmente para almacenamiento. Una vez que la llamada de retorno read devuelve la cadena codificada, PHP
   la decodificará y rellenará el array resultante en la variable superglobal $_SESSION.
  
   Cuando PHP se cierra (o se llama a session_write_close()),
   PHP codificará internamente la variable superglobal $_SESSION y la pasará
   conjuntamente con el ID de sesión a la llamada de retorno write.
   Después de finalizada la llamada de retorno write, PHP invocará internamente al
   gestor de llamada de retorno close.
  
   Cuando una sesión se destruye de forma específica, PHP llamará al gestor destroy con
   el ID de sesión.
  
   PHP llamará a la llamada de retorno gc de vez en cuando para
   terminar cualquier registro de sesión según lo establecido en el tiempo de vida máximo de una sesión.
   Esta rutina debería borrar todos los registros del almacenamiento persistente a los que se
   accedió por última vez más allá del parámetro $lifetime.