CakeFest 2024: The Official CakePHP Conference

Manipuladores de Sessão Personalizados

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.

add a note

User Contributed Notes 1 note

up
-56
tony at marston-home dot demon dot co dot uk
5 years ago
Your custom session handler should not contain calls to any of the session functions, such as session_name() or session_id(), as the relevant values are passed as arguments on various handler methods. Attempting to obtain values from alternative sources may not work as expected.
To Top