web-dev-qa-db-fra.com

PHP Variable de session non définie

Je suis un programmeur noob, donc je m'excuse d'avance pour toute erreur évidente. J'ai passé la semaine dernière à créer une sorte de base de données de produits. Je peux aussi ajouter des produits à l'aide d'un formulaire, voir tous les produits ajoutés, etc. J'ai utilisé des sessions créées à l'aide des données de saisie du formulaire. Je ne parviens pas à faire fonctionner une page de suppression de produit. J'ai essayé d'utiliser unset pour effacer la variable, mais je ne peux pas la faire fonctionner trop. 

ADD Product page qui définit la variable de session: 

$_SESSION['Products'][] = $_POST; //is how i set the session on the add products page. 

unset $_SESSION['Products'][]; //is how i have tried to clear the session although it does not work.

Tout point dans la bonne direction sera apprécié! 

30
boothprod

Vous pouvez supprimer la variable de session en utilisant:

  1. session_unset - Libère toutes les variables de session (Cela revient à utiliser: $_SESSION = array();)
  2. unset($_SESSION['Products']); - Annule uniquement l'index des produits dans la variable de session. (Remember: vous devez utiliser comme une fonction, pas comme vous avez utilisé)
  3. session_destroy - Détruit toutes les données enregistrées dans une session.

Pour connaître la différence entre session_unset et session_destroy, lisez ceci SO answer . Qui aide.

59
Thamilan

Unset est une fonction. Par conséquent, vous devez soumettre quelle variable doit être détruite. 

unset($var);

Dans ton cas 

unset ($_SESSION["products"]);

Si vous devez réinitialiser la variable de session entière, appelez simplement

session_destroy ();
6
Don D

Si vous voulez complètement effacer la session, vous pouvez utiliser ceci:

session_unset();
session_destroy();

En fait, les deux ne sont pas nécessaires mais cela ne fait pas de mal.

Si vous voulez effacer seulement une partie spécifique, je pense que vous en avez besoin:

unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";

en fonction de ce dont vous avez besoin.

3
JRsz

unset est une fonction, pas un opérateur. Utilisez-le comme unset($_SESSION['key']); pour annuler la définition de cette clé de session. Cependant, vous pouvez également utiliser session_destroy();. (Assurez-vous de démarrer la session avec session_start(); également)

1
mehulmpt

J'inclus cette réponse au cas où quelqu'un viendrait sur cette page pour la même raison que moi. Je viens de perdre un temps embarrassant à essayer de cerner le problème. J'appelais:

unset($_SESSION['myVar']);

à partir d'un script de déconnexion. Ensuite, naviguez vers une page qui nécessitait une connexion et le serveur pensait toujours que j'étais connecté. Le problème était que le script de déconnexion n'appelait pas:

session_start();

L'annulation d'une session var ne fonctionne pas à moins de démarrer la session en premier.

1
Jeff Martin