JeuWeb - Crée ton jeu par navigateur
session.gc_probability = 0 et crontjob sur une debian ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : session.gc_probability = 0 et crontjob sur une debian ? (/showthread.php?tid=5620)



session.gc_probability = 0 et crontjob sur une debian ? - php_addict - 02-08-2011

Bonsoir

j'en viens à vous pour un petit soucis de garbage collector qui ne se lance jamais et je viens enfin de trouver la réponse, c'est le fait que dans mon php.ini il y a : session.gc_probability = 0

mais ce que je ne comprends pas ce sont les commentaires suivants? pourquoi est ce par défault à 0 ?

mon php.ini :
php.ini a écrit :; This is disabled in the Debian packages, due to the strict permissions
; on /var/lib/php5. Instead of setting this here, see the cronjob at
; /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below.
; php scripts using their own session.save_path should make sure garbage
; collection is enabled by setting session.gc_probability
;session.gc_probability = 0
session.gc_divisor = 100
[/code]

mon cronjob :
/etc/cron.d/php5 a écrit :# /etc/cron.d/php5: crontab fragment for php5
# This purges session files older than X, where X is defined in seconds
# as the largest value of session.gc_maxlifetime from all your php.ini
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

selon mes logs le cronjob se lance bien (30 fois par jour)

mais pourtant les vieilles sessions ne sont pas éffacée, j'utilise session_set_save_handler dont mon garbage collector est:


public function gc($maxlifetime)
{
$qry = "delete from sessions where sess_expire < ".time();
$sth = $this->db->prepare($qry);
$tot= $sth->execute();
return ($tot);
}

devrais-je mettre session.gc_probability à 1 ? dans mon php.ini ou dans ma classe gerant les sessions ?

j’avoue que je ne suis pas expert en config serveur sur debian...

bonne fin de soirée, et merci pour ce coup de pouce linuxien


RE: session.gc_probability = 0 et crontjob sur une debian ? - php_addict - 11-08-2011

je me permet de faire remonter ce sujet Wink


RE: session.gc_probability = 0 et crontjob sur une debian ? - Slavick - 12-08-2011

Salut.

Alors de mon côté, j'ai ceci dans mon php.ini (sur une Debian à jour ; PHP 5.3.6) :

Citation :; Defines the probability that the 'garbage collection' process is started
; on every session initialization. The probability is calculated by using
; gc_probability/gc_divisor. Where session.gc_probability is the numerator
; and gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request.
; Default Value: 1
; Development Value: 1
; Production Value: 1
; http://php.net/session.gc-probability
session.gc_probability = 1

; Defines the probability that the 'garbage collection' process is started on every
; session initialization. The probability is calculated by using the following equation:
; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
; session.gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request. Increasing this value to 1000 will give you
; a 0.1% chance the gc will run on any give request. For high volume production servers,
; this is a more efficient approach.
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
; http://php.net/session.gc-divisor
session.gc_divisor = 1000

Je trouve que c'est plus clair que ce que tu as dans ton php.ini. Tongue
Bref, effectivement, il vaut mieux que gc_probability ne soit pas à 0 pour qu'il y est une chance de faire un nettoyage des sessions.

Par contre, (je n'ai jamais utilisé la fonction session_set_save_handler), je suppose que le cronjob ne va supprimer que les sessions par défaut de PHP et non celles créées par ton site (vu qu'elles sont stockées dans une BDD). J'en suppose que le nettoyage ne pourra se faire que lorsqu'on accède à ton site... C'est ce que j'en comprends.


RE: session.gc_probability = 0 et crontjob sur une debian ? - php_addict - 12-08-2011

salut

merci pour l'extrait de ton php.ini, effectivement le tient est plus sympa...

tu ferais quoi?

- un ini_set ( 'session.gc_probability' , '1' ) dans mon script qui gère le - session_set_save_handler
- ou session.gc_probability = 1 direct dans le php.ini ?


RE: session.gc_probability = 0 et crontjob sur une debian ? - Slavick - 12-08-2011

Le plus simple et le mieux (je pense) est de le mettre dans le php.ini. Comme ça, si tu as une nouvelle application, pas besoin de rajouter cette ligne de code pour nettoyer les sessions. Et ce sera aussi pris en compte dans ton application. Wink


RE: session.gc_probability = 0 et crontjob sur une debian ? - php_addict - 12-08-2011

ok, je vais faire ca

encore merci !