PHP: fermeture automatique d'une session

Fermé
hammag - 15 juin 2009 à 16:43
 lickma99 - 25 août 2015 à 15:48
Bonjour,

bien sûr vous avez remarqué que dans plusieurs sites la session se ferme automatiquement après une période d'inactivité.
je cherche à faire la même chose dans mon site php j'en ai aucune idée. En fait, ce que je cherche c'est après une période d'inactivité (par exemple 10 minutes) la session sera fermée, je ne trouve pas la fonction php qui modifie le timeout.

j'ai besoin d'une idée ou juste un conseil pour commence,
A voir également:

6 réponses

Bonjour

Si j'en crois le commentaire trouvé dans le manuel PHP
http://www.php.net/manual/fr/function.session-cache-expire.php

The manual probably doesn't stress this enough:
** This has nothing to do with lifetime of a session **


que je me risque à traduire :
Le manuel n'insiste probablement pas assez sur ce point :
** Ceci n'a aucun rapport avec la durée d'une session **


Personnellement, pour faire une expiration automatique, je me contente de mettre l'heure dans une variable de session $_SESSION['derniereaction'] = time(); lors de l'ouverture de la session.
Lors de l'appel suivant (de la même session)
 if (time()-$_SESSION['derniereaction'] > $dureelimite) {
  // la session a expiré
}
else {
  $_SESSION['derniereaction'] = time(); // on relance
  // reste du code
}


(en espérant ne pas avoir dit trop de bêtises cette fois)
12
Merci le père !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 juin 2009 à 20:53
as tu essayé cette solution proposée plus haut ?

/* Configure le limiteur de cache à 'private' */

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

/* Configure le délai d'expiration à 30 minutes */
session_cache_expire (30);
$cache_expire = session_cache_expire();

/* Démarre la session */

session_start();

echo "Le limiteur de cache est maintenant fixé à $cache_limiter<br />";
echo "La session en cache va expirer après $cache_expire minutes";
?> 
2
Désolé d'insister et de répéter ce que j'ai dit dans le message 3, mais d'après les commentaires des utilisateurs dans la doc, ces fonctions n'ont aucun rapport avec la durée d'expiration des sessions.
J'ajoute : il s'agit de la durée d'expiration des caches, pas de celle de la session.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 16:55
je t'ai trouvé ça sur le site: www.manuelphp.com

session_cache_expire()Retourne la configuration actuelle du cache expire
[ Exemples avec session_cache_expire ] PHP 4 >= 4.2.0, PHP 5

int session_cache_expire ( int new_cache_expire )

session_cache_expire retourne la configuration actuelle du cache expire Si new_cache_expire est fourni dans le fichier php.ini , la configuration actuelle de cache expire sera remplacée par new_cache_expire .

Le délai d'expiration du cache est remis à sa valeur par défaut de 180, stockée dans session.cache_limiter , au démarrage de la requête. Par conséquent, vous devez appeler session_cache_expire à chaque requête (et avant que session_start ne soit appelée).
Exemple avec session_cache_expire


<?php

/* Configure le limiteur de cache à 'private' */

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

/* Configure le délai d'expiration à 30 minutes */
session_cache_expire (30);
$cache_expire = session_cache_expire();

/* Démarre la session */

session_start();

echo "Le limiteur de cache est maintenant fixé à $cache_limiter<br />";
echo "La session en cache va expirer après $cache_expire minutes";
?>

Note

La directive new_cache_expire n'a de valeur que si session.cache_limiter a une valeur différente de nocache .

vas voir ton php.ini pour ça
0
raph0351 Messages postés 369 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 17 mai 2011 14
15 juin 2009 à 16:59
salut,

je suis pas tré tré bon en matiere d'explication
mais je te fait part de ceci qui ma pas mal depaner en php:

http://www.php.net/manual/fr/

jespere que sa te depanera

-----------------------------------------------------------------------------------------------------------------------------------
ALLEZ L'ASM CLERMONT AUVERGNE !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
non "le père" tu n'as pas dit des bêtises, c'est presque ce que je cherche.
presque, parce que si je suivrai ton conseil ma session sera fermée après $dureelimite, même si je suis entrain de travailler dans mon site. Ce que je cherche c'est la désactivation de ma session si elle reste inactive pour la durée $dureelimite (pas de clique souris et clavier)
0
La remarque sur les bêtises était destinée à Alain_42, je venais de le contredire sur un autre post alors que c'était lui qui avait raison.
Pour ce qui est de l'inactivité d'une session, je te signale qu'à moins d'utiliser AJAX (que je ne connais pas), le serveur ne sait pas que tu es en train de cliquer sur la souris ou de frapper quelque chose au clavier. Il ne le sait que quand tu cliques sur un lien ou que tu valides un formulaire. Il ne peut pas vérifier quelque chose dont il n'a pas connaissance.
Mais que tu mettes en oeuvre Ajax ou non, je pense que le principe de la surveillance de la durée d'inactivité sera exactement la même. La seule différence sera la nature des événements considérés comme des activités.
0
après des recherches sur le net j'ai essayé de modifié la variable session.gc_maxlifetime (en mettant par exemple 10 secondes):

 
ini_set('session.gc_maxlifetime', 10);
session_start(); 
 
 


mais, ca marche pas, même après l'expiration des 10 secondes, les variable de ma session restent toujours valides.
0