est session_start () supposé prolonger la durée de vie de la session ID Cookie par la variable session.gc_maxlifetime? P>
Mon session.gc_maxlifetime est de 24 minutes et chaque session vivait seulement 24 minutes quelles que soient une activité supplémentaire sur le site. Je reçois ma session, rafraîchir la page et le temps d'expiration ne change pas. Cela se traduit par une déconnexion après 24 minutes de connexion, peu importe quoi. Y a-t-il quelque chose qui ne va pas avec ma configuration? P>
3 Réponses :
Je pense que ce message fournira la solution que vous recherchez: délai d'attente de session en PHP : meilleures pratiques p>
Fondamentalement, lorsque session_start () code> est appelé, il existe une probabilité de 1% (par défaut) que le collecteur des ordures sera exécuté. Lorsque le collecteur des ordures est exécuté, SCAN pour et supprime des sessions expirées. Toutefois, lorsque vous êtes le seul utilisateur d'accéder à la page (que vous êtes probablement, pendant le développement) ou il existe très peu d'utilisateurs, le collecteur des ordures ne fonctionnera que lorsque vous accédez à une page. Cela se produit après
session_start () code> est appelé, réinitialisant efficacement la minuterie. Au lieu d'essayer de contourner cela, implémentez simplement votre propre fonction
session_start () code> qui applique le délai d'attente. Essayez la fonction que le robot
@glass code> posté, dans le lien que je vous ai donné ci-dessus. P>
Donc, PHP ne met pas automatiquement à jour le cookie sur session_start ()? Je dois le faire manuellement?
Il met à jour la minuterie d'expiration, mais cette minuterie est réinitialisée lorsque vous accédez à une autre page. Essayez la fonction @Glass Robot Publié (voir mon message).
Est-ce une mauvaise idée de régénérer l'identifiant de la session sur chaque demande?
C'est en fait une bonne idée, mais cela ne va pas aider avec ce problème. Lorsque vous régénérez l'ID de session, PHP déplace automatiquement les données de session en nouvelle session. Cependant, cela réinitialisera probablement toujours la minuterie. Je recommanderais d'ajouter un bloc de code à chaque page qui suit l'expiration de la session et ferme manuellement la session si la session a expiré.
J'ai remarqué ce comportement en PHP et j'ai essayé chaque configuration sur php mais pas de chance jusqu'à présent.
Mes séances étaient en train de mourir sur l'heure exacte du premier Mon application a déjà un nombre de clients important, environ 60 connexions par seconde, de sorte que le GC a été touché tous les 1,5 (je suppose). P> Ma solution pour le temps de cookie ne s'étend pas quelque chose comme ça (cela peut sembler ne pas être élégant, mais a fonctionné pour moi). P> session_start () code>, cookie à vie , il ne renouvelait pas son temps d'expiration. P>
function my_session_start($maxtime = 300){
// $maxtime = 300 for 5 minutes
session_start();
$_sess_name = session_name();
$_sess_id = session_id();
// Update cookie ;)
setcookie($_sess_name, $_sess_id, time() + $maxtime, "/");
}
J'essayais juste cela et je devais changer la dernière ligne vers Setcookie ($ _ sess_name, $ _SESS_ID, TIME () + $ Maxtime, "/"); Code> Pour obtenir le chemin du chemin de cookie. Sans ce quatrième paramètre, chaque dossier se déroule avec son propre cookie et éventuellement sa propre session. (Je n'ai pas joué avec cela assez longtemps pour taquiner toutes les conséquences.)
En fait, j'ai frappé votre problème de commentaire, concernant la voie de Cookie, je vais mettre à jour ma réponse, merci !!
@ user1618143 Le quatrième paramètre "/" code> était également nécessaire dans mon cas, php v5.6.40-13.
J'ai eu un problème aussi. Je pensais que chaque
function my_session_start($maxtime = 300) { ini_set('session.gc_maxlifetime', $maxtime); session_set_cookie_params(0, '/', "." . $domain); session_start(); }
J'ai eu le même problème que vous avez fait le même problème que la session devrait être prolongée tant qu'il y a de l'activité, et après avoir fait de nombreux tests locaux, j'ai trouvé simplement ajouté Session_ReReGenee_ID () pour être le meilleur moyen pour moi.