session_gc

(PHP 7 >= 7.1.0, PHP 8)

session_gcExecuta a coleta de lixo de dados da sessão

Descrição

session_gc(): int|false

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:

  • Sites com baixo tráfego podem não ter seus dados de sessão excluídos dentro do período recomendado.
  • Em sites com alto tráfego, o coletor de lixo pode ser acionado com muita frequência, realizando trabalho extra desnecessário.
  • A coleta de lixo é realizada mediante solicitação do usuário, e o usuário pode experimentar um atraso.

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.

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, 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.

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();

// 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);
}
?>

Veja Também