Bon, il me semble tenir le bon bout, et c'est très simple apriori. ;)
En faite, en faisant d'autres essais, j'ai remarqué qu'il fallait que les 2 directives du php.ini session.cookie_lifetime et session.gc_maxlifetime soit concordantes (sinon avoir les mêmes valeurs) pour que ça fonctionne.
Dans mon dernier essai, j'ai effectué ceci :
Et là, la session change si on clique sur le lien (en bas) au-delà de 10 secondes.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php ini_set('session.cookie_lifetime', 10); ini_set('session.gc_maxlifetime', 10); session_start(); $params = session_get_cookie_params(); echo '<pre>'; echo 'apache_request_headers :<br />'; print_r(apache_request_headers()); echo 'apache_response_headers :'; print_r(apache_response_headers()); // echo 'session_name : '.session_name().'<br />'; echo 'session_id : '.session_id(); print_r($params); echo 'lifetime : '.date('d/m/Y H:i:s', $params['lifetime']); print_r($_COOKIE); echo '</pre>'; ?> <a href="index.php">INDEX</a>
Aussi, on peu vérifier qu'avant le délai de 10 secondes que le cookie est présent coté navigateur, mais au-delà il est supprimé.
Le navigateur le fait automatiquement.
D'ailleurs, on peu remarqué lorsque le cookie est encore là, qu'une date est affichée, alors que dans les essais précédant, c'était toujours "à la fermeture". (c'était cette 2ème énigme que je ne parvenais pas à comprendre).
Donc ici finalement, on s'assure que des 2 cotés, client et serveur, que cette persistance sera stoppée/supprimée dans le délai qu'on s'est fixé (même 10 secondes).
Mais encore, dans mes essai, j'ai (provisoirement) modifié la directive session.gc_divisor en mettant 1 (1000 par défaut) dans le php.ini.
Au final, on remarque parfaitement que Php (ou le système) supprime immédiatement les fichiers de sessions expirés.
A priori, le ramasse serait déclenché à chaque fois que le fichier est demandé.
Mais mettre 1 pour le gc_divisor, c'est vraiment pour faire ce genre d'essai, certainement pas pour un site en production.
En résumé, on peu (apparemment) parfaitement reproduire un fonctionnement des sessions même sur 1 seul post en local.
Et pour le problème évoqué ici, il suffit mettre les même valeurs aux session.cookie_lifetime et session.gc_maxlifetime.
Voilà voilà. ;)