Augmenter durée de session

Wilfried
Invité n'ayant pas de compte PHPfrance

04 mai 2011, 09:59

Bonjour à tou(te)s,

Je vous expose mon problème, que je n'ai toujours pas résolu malgré de nombreuses recherches ...

J'ai un intranet protégé par un login/mot de passe pour chaque utilisateur. Lors du login, une session est créée. Il arrive souvent que lorsqu'un utilisateur valide un formulaire (certains sont assez longs à remplir), il se retrouve déconnecté car la session a expiré entre temps ...

Sur mon serveur (debien lenny), j'ai changé les valeurs de :

- /usr/lib/php5/maxlifetime
- session.gc_maxlifetime et session.cache_expire dans /etc/php5/apache2/php.ini

De sorte à ce que les sessions durent environ 2 heures.

Malgré tout, les sessions expirent tout de même au bout de 30 minutes environ (parfois moins, apparemment) :-(

Si quelqu'un aurait une idée d'où vient ce problème, je suis preneur.

Merci beaucoup,

wilfried

devlop78
Invité n'ayant pas de compte PHPfrance

05 mai 2011, 01:48

La réponse m'intéresse, le seuil serait placé par défaut à 24 minutes.

Une fois j'ai eu besoin de le faire, je n'avais pas le temps et cette solution ne fonctionnait pas, j'ai donc mis en place une requête ajax toutes les x minutes pour rafraichir la session. Sinon, sur une autre appli, j'utilise tout simplement des cookies.

ViPHP
xTG
ViPHP | 7331 Messages

05 mai 2011, 08:06

session.cookie_lifetime
;)

devlop78
Invité n'ayant pas de compte PHPfrance

05 mai 2011, 19:47

non ... ça c'est pour le cookie de la session. Il n'est pas détruit par défaut http://www.manuelphp.com/php/ini.sessio ... fetime.php

Son problème si j'ai bien compris c'est que c'est le fichier de session qui est détruit.

Wilfried
Invité n'ayant pas de compte PHPfrance

06 mai 2011, 10:55

Bonjour,

Merci pour vos réponses.

Effectivement, c'est bien la session qui est détruite, et du coup mon problème n'est toujours pas résolu ... A tout hasard, j'ai aussi modifié le session.cookie_lifetime, mais rien n'y fait. C'est à désespérer :-(

Merci encore pour votre aide.

Wilfried

Eléphant du PHP | 127 Messages

06 mai 2011, 14:29

Dans la théorie, les sessions sont gérées en fonction des valeurs session.gc_maxlifetime , session.gc_divisor et session.gc_probability.

En fait, pour chaque appel à un script php, il y a "session.gc_probability /session.gc_divisor" chances que le Garbage Collector (GC) soit déclenché. Il contrôle alors que la dernière modif des fichiers stockant les sessions est inférieure à session.gc_maxlifetime et, dans le cas contraire, supprime les fichiers.
Il est possible qu'un autre mécanisme soit présent sur ton serveur, qui empêcherait l’exécution correct du GC.

Si tu ne détectes pas la cause de ton problème, il est possible de stocker les sessions en base de données. Une petite recherche te donnera toutes les clefs pour réaliser ceci. Pour info, tu peux utiliser la fonction session_set_save_handler().

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 mai 2011, 16:55

pour la version de stockage dans la db steal35 propose un exemple avec sqlite => vos-contributions/gerer-les-sessions-av ... 56150.html


@+
Il en faut peu pour être heureux ......