2013-05-31 4 views
1

J'essaie d'utiliser des sessions en php et ne pas aller très loin. Toutes mes pages php sont appelées via ajax à partir d'une seule «page de portail». Je stocke des informations entre les appels ajax en utilisant des sessions. J'ai un fichier d'inclusion qui est le premier fichier dans chaque page ajax qui a session_start comme tout premier appel de méthode. Les données de session semblent être sauvegardées correctement. Cependant, j'ai un problème pour me débarrasser de la session quand j'en ai fini avec la page de déconnexion de l'utilisateur. La page est une page fermeture de session ajax qui fait essentiellement ceci:PHP ne perd pas les données de session après session_destroy

session_start(); 
    $_SESSION = array(); 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000,$params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
    } 
//code to unset session variables 
     session_destroy(); 

si je tente d'écrire une variable de session à l'écran sur la page de fermeture de session est vide comme on peut s'y attendre. Toutefois, si j'actualise la page du portail et affiche l'identifiant session_id à l'écran, il s'agit du même identifiant que celui de la dernière session qui aurait été détruite. Si je ferme le navigateur et l'ouvre à nouveau j'ai une nouvelle session

le cookie de session de php est toujours dans les cookies de navigateur après que la page de déconnexion ait été appelée. Naturellement, une actualisation de page chargera ce cookie. Pourquoi le cookie n'est-il pas supprimé? Est-ce que mon code est défectueux ou est-ce quelque chose à voir avec le fait qu'il s'agit d'une page ajax?

+0

Pourquoi y installez-vous un cookie? et pourquoi appelez-vous '$ _SESSION = array();'? – kelunik

+0

Se pourrait-il que vous ayez encore enregistré l'ID de session dans l'url ou dans un champ de formulaire masqué? –

+0

Êtes-vous sûr de ne pas être programmeur? –

Répondre

0

Lors de la suppression d'un cookie, la suppression de cookie aura lieu dans la demande qui indique au navigateur de supprimer le cookie. Mais pendant cette requête le cookie existera toujours. Ainsi, pour voir le cookie encore existant dans l'appel qui supprime le cookie est le comportement attendu. Donc, pendant/après la déconnexion, le cookie existera toujours. Le cookie sera seulement parti 1 demande après la demande qui efface le cookie. Si le cookie existe encore dans plusieurs demandes après la déconnexion, essayez d'augmenter la différence TIME pour le cookie de 42000 à (11 heures) à 90000 (25 heures). Peut-être avez-vous une différence de fuseau horaire entre vous et le client?

+0

Salut. Je continue de rafraîchir la page et le cookie est toujours là. Ces actualisations ne sont-elles pas séparées des requêtes? Une actualisation compte-t-elle comme la même requête qui a supprimé le cookie parce que j'utilise ajax? Je recharge la page en entrant l'url dans un onglet sepatate et le cookie est toujours là. Je fais d'autres demandes au domaine et le cookie est toujours là :) – user2274191

+0

Comment savez-vous que le cookie est toujours là? Cherchez-vous avec javascript? avec php? avec un firebug? –

+0

salut. en regardant dans la collection de cookies du navigateur et en écrivant aussi le session_id à l'écran qui montre la même valeur avant et après que je me suis déconnecté. – user2274191

Questions connexes