Por que o Debian limpa sessões php com uma tarefa cron em vez de usar o coletor de lixo interno do php?

24

Debian e derivados (Ubuntu) não usam o coletor de lixo da sessão php

session.gc_probability = 0

em vez disso, eles usam um cron /etc/cron.d/php5

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Por que o Debian escolheu fazer isso?

    
por nulll 29.05.2013 / 11:15

2 respostas

26

Porque o Debian define permissões muito restritas em /var/lib/php5 (1733, raiz do proprietário, raiz do grupo) para evitar o seqüestro de sessão do PHP. Infelizmente, isso também impede que o coletor de lixo de sessão PHP nativo funcione, porque não pode ver os arquivos de sessão lá. O cron job é executado como root, que tem acesso suficiente para ver e limpar os arquivos da sessão.

Editar : Documentação de apoio: O comportamento foi estabelecido em resposta a bug # 267720 . (Costumava haver comentários no arquivo stock php.ini sobre isso, mas eu não os vejo lá agora na minha instalação PHP baseada em wheezy.)

    
por 29.05.2013 / 17:34
5

É provável que seja um pouco mais confiável em sites com pouco tráfego (se você receber apenas algumas centenas de visitas por dia e a GC só disparar a cada mil, as sessões podem ficar por mais tempo do que deveriam) e eu imagino pode ser um pouco menos severo no servidor do que o GC nativo se você tiver muitas sessões.

    
por 29.05.2013 / 17:29