2009-04-17 24 views
6

Il est possible que je ne supprime pas correctement les sessions PHP lorsque l'utilisateur se déconnecte. J'ai remarqué que si je me déconnecte et que je me reconnecte sans fermer le navigateur, l'ID de session ne change pas mais si je me déconnecte, ferme la fenêtre du navigateur, en ouvre un nouveau et me connecte, l'ID de session sera différent . Dois-je faire quelque chose de différent ou est-ce un comportement normal? J'ai utilisé le même processus pendant trois ans mais quelque chose est arrivé récemment qui m'a fait penser que peut-être je dois faire quelque chose de différent.Comment supprimer une session PHP?

Voici ce que je fais essentiellement quand quelqu'un clique sur Déconnexion.

<?php 

session_start(); 

if(isSet($_SESSION['FacID'])) 
    $facID = $_SESSION['FacID']; //Want to re-instate this after we destroy the session. 

unset($_SESSION); 
session_destroy(); 

if(isSet($_SESSION['FacID'])) 
    $_SESSION['FacID'] = $facID; 

?> 

Répondre

0

Qu'en est-il de l'énorme sauvegarde-et-détruire? Juste session_start et définissez vos variables. Pas besoin de détruire, puis les réinitialiser!

Votre « problème » avec le navigateur est que lorsque vous fermez la fenêtre de votre navigateur, votre navigateur supprime le cookie PHP envoie donc il connaît l'ID de session. C'est une option de navigateur et ne peut pas être changé du côté du serveur (sauf si vous exploitez). Il peut être contourné en utilisant certaines méthodes, mais ce n'est probablement pas votre meilleure option.

5

Si vous ressentez le besoin de forcer un nouvel identifiant http://pl.php.net/manual/en/function.session-regenerate-id.php

Et à votre question, du manuel:

session_destroy() détruit toutes les données associées à la session en cours . Il ne désactive aucune des variables globales associées à la session ou ne met pas à jour le cookie de session. Pour utiliser à nouveau les variables de session, session_start() doit être appelée.

Afin de tuer la session tout à fait, comme pour déconnecter l'utilisateur, l'identifiant de session doit également être effacé. Si un cookie est utilisé pour propager l'identifiant de session (comportement par défaut), puis le cookie de session doit être supprimé. setcookie() peut être utilisé pour cela.

1

Votre session se détruit.

PHP ne génère un identifiant de session si le navigateur ne spécifie pas un. Tant que la session a été détruite, il n'y a pas de problème avec ça.

+0

Ainsi, le fait que le même ID de session (si le navigateur n'est pas fermé) utilisé pour plusieurs utilisateurs est vraiment pas un problème? – user39653

+0

Comme il existe un nombre limité d'identifiants de session, chaque ID est utilisé pour plusieurs utilisateurs. Les réutiliser n'est pas un problème. –