Para implementar as sessões em banco de dados, ou qualquer outro método de armazenamento, é preciso usar session_set_save_handler() para criar um conjunto de funções de armazenamento a nível de usuário. Um manipulador de sessão pode ser criado usando SessionHandlerInterface ou estender os manipuladores internos do PHP herdando de SessionHandler.
Os callbacks especificados em session_set_save_handler() são métodos executados pelo PHP durante o ciclo de vida de uma sessão: open
, read
, write
e close
e para as tarefas de manutenção: destroy
para deletar uma sessão e gc
para recolha periódica de lixo.
Portanto, o PHP sempre requer manipuladores de gravação de sessão. O padrão normalmente é o manipulador de gravação interno de 'arquivos'. Um manipulador personalizado pode ser configurado usando session_set_save_handler(). Manipuladores internos alternativos também são disponibilizados por extensões do PHP, como sqlite
, memcache
e memcached
e podem ser definidos com session.save_handler.
Quando a sessão inicia, o PHP internamente executa o manipulador open
seguido pelo callback read
que deve retornar uma string codificada exatamente como foi originalmente passado para armazenamento. Após o read
retornar a string codificada, o PHP vai decodificá-la e colocar o array resultante na super global $_SESSION.
Quando o PHP é encerrado (ou quando session_write_close() for chamada), o PHP internamente vai codificar a super global $_SESSION e passá-la junto com o ID de sessão para o callback write
. Depois que o callback write
finalizar, o PHP internamente invocará o callback close
.
Quando uma sessão é destruída, o PHP chamará o manipulador destroy
com o ID de sessão.
O PHP executará o callback gc
de tempo em tempo para apagar quaisquer informações na sessão de acordo com o tempo de vida máximo (lifetime) definido para a sessão. Esta rotina deve apagar todas as informações do armazenamento persistente em que a diferença de tempo do último acesso até o momento atual seja maior que $lifetime
.