6
votes

Problèmes de session PHP

J'utilise le code suivant pour invalider la session. J'ai lié à logout.php dans de nombreuses pages. Si ce lien de déconnexion est cliqué sur la page logout.php est appelé. Ce qui suit est le code dans logout.php . xxx

une fois que la session est invalidée, je souhaite ouvrir la page index.php . Mais je reçois l'erreur suivante:

AVERTISSEMENT: Session_Destroy () [Fonction.Session-Détruire]: Essayer de détruire une session non assurée dans C: \ Xampp \ htdocs \ Selection \ Logout.php sur la ligne 3

AVERTISSEMENT: impossible de modifier les informations d'en-tête - Les en-têtes déjà envoyés par (sortie démarré à C: \ xampp \ htdocs \ selection \ logout.php: 3) dans c: \ xampp \ htdocs \ selection \ logout.php sur la ligne 4 < / p>

Qu'est-ce qui ne va pas?


0 commentaires

5 Réponses :


16
votes

Je pense que vous ne pouvez pas avoir appelé la fonction session_start () avant de détruire la session.


1 commentaires

Merci de toute façon que la session_start () doit être appelée au début du script.



8
votes

Vous devez appeler session_start () en haut de la page pour rappeler à PHP que ce Pagecall appartient à la session. - au moins Manuel PHP le dit.

Les notes sur cette page manuelle donnent un indice, que Session_unset () ne doit être utilisée que dans des environnements plus anciens qui n'utilisent pas une variable $ _Session.


0 commentaires

2
votes

Vous devez d'abord ouvrir la session:

header('Location: index.php');
session_start();
session_unset();
session_destroy();


2 commentaires

Je pense que la redirection doit être placée à la fin, car écrit le code comme celui-ci, le script fait la redirection et n'exécute pas les autres fonctions.


Cela ne fonctionne que comme prévu car le script termine toujours l'exécution après l'envoi de l'en-tête. Cependant, vous devriez placer l'en-tête après la détruite de la session pour réduire la confusion du code.



1
votes

Le problème est que vous ne pouvez pas détruire une session qui n'a pas été lancée. Cela soulève alors un avertissement qui est écho au navigateur. Le problème suivant est que vous ne pouvez pas envoyer en-têtes après avoir été émis sur le navigateur, il augmente un autre avertissement.

Il vous suffit de vérifier si une session existe d'abord: P>

if (session_name() != '') {
    session_destroy();
}


0 commentaires

0
votes

Vous devez toujours utiliser session_start (); Avant d'utiliser une fonction de session / variable. Démarrez donc tous les fichiers PHP avec session_start () ;. Aussi logout.php: xxx

Vous n'avez pas non plus besoin de le déséfini.


1 commentaires

La documentation PHP affirme très clairement essuyer manuellement le tableau $ _session avec _ session = tableau (); . Pourquoi dites-vous que vous n'avez pas besoin de le déséfinir. C'est la documentation que je fais référence à .