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
.