(PHP 7 >= 7.1.0, PHP 8)
session_gc — Executa a coleta de lixo de dados da sessão
Por padrão, o PHP usa session.gc_probability para executar o coletor de lixo da sessão probabilisticamente em cada requisição. Existem algumas limitações com essa abordagem:
Para sistemas de produção, recomenda-se desativar a
coleta de lixo baseada em probabilidade, definindo
session.gc_probability para 0
e acionar explicitamente o coletor de lixo periodicamente, por exemplo, usando "cron" em
sistemas do tipo UNIX para executar um script que chama session_gc().
Nota: Ao chamar a função session_gc() a partir de um script PHP de linha de comando, a diretiva session.save_path deve ser definida para o mesmo valor das requisições web, e o script deve ter permissões de acesso e exclusão para os arquivos de sessão. Isso pode ser afetado pelo usuário que executa o script, e por recursos de contêiner ou "caixa de areia", como a opção
PrivateTmp=do systemd.
Esta função não possui parâmetros.
session_gc() retorna o número de dados de sessão excluídos
em caso de sucesso, ou false em caso de falha.
Nota: Os manipuladores de salvamento de sessão 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.
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();
// Executa a coleta de lixo (GC) imediatamente.
session_gc();
// Limpa o ID da sessão criado pelo session_start()
session_destroy();
?>Exemplo #2 Exemplo de session_gc() para script acessível pelo usuário
<?php
// Observação: session_gc() é recomendado para ser usado por um script de gerenciador de tarefas, mas
// pode ser utilizado da forma abaixo.
// 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);
}
?>