session_gc
(PHP 7 >= 7.1.0, PHP 8)
session_gc — Executa a coleta de lixo de dados da sessão
Descrição
A coleta de lixo baseada em probabilidade funciona até certo ponto, mas possui alguns problemas. 1) Os dados
de sessão de sites com baixo tráfego podem não ser excluídos dentro do
período preferido. 2) A coleta de lixo em sites com alto tráfego pode ser muito frequente. 3) A coleta de lixo é
realizada mediante solicitação do usuário, e o usuário pode experimentar um atraso durante o processo de
coleta de lixo.
Portanto, é recomendado executar a coleta de lixo periodicamente
em sistemas de produção, utilizando, por exemplo, o "cron" para sistemas semelhantes ao UNIX.
Certifique-se de desativar a coleta de lixo baseada em probabilidade
definindo session.gc_probability
como 0.
Parâmetros
Esta função não possui parâmetros.
Valor Retornado
session_gc() retorna o número de dados de sessão excluídos
em caso de sucesso e false
em caso de falha.
Os manipuladores de salvamento antigos não retornam o número de dados de sessão excluídos, apenas
um indicativo de sucesso ou falha. Se este for o caso, o número de dados de sessão excluídos
se torna 1, independentemente dos dados realmente excluídos.
Exemplos
Exemplo #1 Exemplo de session_gc() para gerenciadores de tarefas como o cron
<?php
// Observação: Este script deve ser executado pelo mesmo usuário do processo do servidor web.
// É necessário ter uma sessão ativa para inicializar o acesso ao armazenamento de dados da sessão.
session_start();
// Execute a coleta de lixo (GC) imediatamente.
session_gc();
// Limpa o ID da sessão criado pelo
session_destroy();
?>
Exemplo #2 session_gc() example for user accessible script
<?php
// Observação: session_gc() é recomendado para ser usado por um script de gerenciador de tarefas, mas
// pode ser utilizado da seguinte forma.
// Usado para verificar o último horário de coleta de lixo (GC).
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// Execute a coleta de lixo (GC) apenas quando o período de GC tiver decorrido.
// Ou seja, chamar session_gc() a cada solicitação é desperdício de recursos.
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>