Procurando por detalhes sobre como funciona a coleta de lixo da sessão PHP

6

O PHP tem várias configurações de sessão que controlam a probabilidade de que a coleta de lixo (isto é, a exclusão de sessões expiradas) ocorra.

Minha pergunta é: essa probabilidade se aplica a todos os threads do Apache em execução em todos os virtualhosts em qualquer servidor Apache?

Por exemplo:

  • Se a probabilidade for definida como 1/100, isso significa que qualquer thread do Apache que executa um processo PHP vai para o pool de processos que podem ter o gc executado?
  • ou, isso se aplica apenas aos threads em execução para um determinado VirtualHost? Ou outro tipo de particionamento?
  • Finalmente, se um processo PHP que ativa o gc, ele executa o gc em todas as sessões do PHP? ou apenas as sessões para esse VirtualHost? Ou outro tipo de partioning?

Estou tentando avaliar se preciso ajustar a configuração gc_probability para um determinado VirtualHost, para todo o servidor ou o que.

    
por JDS 29.09.2011 / 17:38

1 resposta

2

If the probability is set to 1/100, does that mean that any Apache thread that runs a PHP process goes into the pool of processes that may have gc run?

Se esse processo tocar a sessão [session_start ()], então sim, ele poderá executar a coleta de lixo.

Se você precisa de diferentes hosts virtuais para ter diferentes coletas de lixo e sessões, então você deve usar o session.save_path opção para definir um caminho diferente para cada host virtual. Você pode fazer isso na sua configuração do host virtual do Apache com uma diretiva como 'php_value session.save_path "/srv/www/www.example.org/sessions". Se você tiver vários aplicativos diferentes em execução com diferentes requisitos de sessão, talvez seja necessário definir caminhos diferentes e GC.

Honestamente, a coleta de lixo da sessão do PHP não é tão boa assim. Talvez seja melhor desativá-lo completamente e usar um script iniciado no cron para limpar periodicamente as sessões antigas. Ou outra alternativa, que requer suporte no aplicativo PHP, seria armazenar suas sessões em um banco de dados.

Se você estiver hospedando coisas para terceiros, então você certamente deseja configurar um diretório de sessão separado para cada host virtual.

    
por 29.09.2011 / 21:25