Retorno de tempo limite da session PHP?

Estou executando uma combinação PHP + APACHE + CENTOS Linux.

Eu implementei um login e terminei no site.

A minha pergunta é, como posso saber quando a session do php expirou (o usuário fechou o navegador sem sair)?

O motivo é que eu quero executar algumas limpezas e / ou atualizações de database (chamando outro PHP) quando o usuário fez um dos seguintes procedimentos: (1) LOGGED-OUT ou (2) TIMED-OUT

Acho que eu teria que usar o Apache / Linux, certo?

Em vez de detectar quando a session php expirar, você pode criar um script que será executado em algum intervalo semi-regular (a cada 5 minutos, digamos, usando um trabalho crontab provavelmente) que desconectará / executará a limpeza para qualquer um que não tenha Foi ativo na última hora (ou qualquer que seja o seu valor de tempo limite) automaticamente. Basta adicionar um ‘aguardo’ à sua tabela de usuários.

Acompanhar as sessões em um database

Se você mantiver os detalhes de suas sessões em uma tabela de database e registrar qualquer atividade, você pode verificar facilmente quais sessões foram inativas por um período de tempo específico.

Fila de processo

Adicionar a funcionalidade de limpeza às ações do usuário vai abrandar seu site desnecessariamente. Um usuário não deve ter que aguardar que tais ações ocorram antes de obter uma resposta do servidor.

CRON

Em vez disso, você pode adicionar as ações a serem executadas em uma tabela de fila e, em seguida, usar um trabalho CRON para verificar periodicamente a tabela da fila para ver o que precisa ser feito. A syntax do CRON está listada aqui .

Você pode armazenar o ID da session em um database com um carimbo de data / hora e atualizar o carimbo de data / hora cada vez que o usuário solicita uma página da Web.

Em seguida, defina um cron que olha para cada session “ativa”, calcula o tempo de inatividade e atualiza a session para “morto” (que pode ser feito com uma única instrução SQL que é executada periodicamente).

Além disso, modifique seu logout para atualizar a tabela de session e configure a session como “morto”.

De qualquer forma, não acho que existam outras formas de fazer isso (com as funções PHP “padrão”), mas vamos ver o que outras pessoas dizem.

Eu tive o mesmo problema, embora com o Lighty + PHP + Ubuntu. Eu acho que o problema é que o php só reage nos pedidos de página, então não há chance de colocar o evento no tempo limite.

Você pode replace as funções de session-loja em PHP, mas isso também não o ajudará.

No entanto, você poderia armazenar a hora do último evento na session e, com cada session, começou a limpar velhas sessões que foram executadas em tempos limite. Não é uma maneira muito limpa, mas a única maneira de trabalhar que encontrei.