Quelle est la différence entre session_unset () et session_destroy () en PHP?


88

Depuis la documentation php.net :

session_destroy - Détruit toutes les données enregistrées dans une session

session_unset - Libère toutes les variables de session

Ma question en trois parties est:

Les deux fonctions semblent très similaires.
Quelle est vraiment la différence entre les deux?

Les deux semblent supprimer toutes les variables enregistrées dans une session. L'un d'entre eux détruit-il réellement la session elle-même? Sinon, comment y parvenir (détruire la session elle-même).

Est-il correct qu'aucune des deux fonctions ne supprime le cookie de session chez le client?

Réponses:


144

session_unsetefface simplement la $_SESSIONvariable. C'est équivalent à faire:

$_SESSION = array();

Cela n'affecte donc que l' $_SESSIONinstance de variable locale mais pas les données de session dans le stockage de session.

Contrairement à cela, session_destroydétruit les données de session qui sont stockées dans le stockage de session (par exemple le fichier de session dans le système de fichiers).

Tout le reste reste inchangé.


@Gumbo N'y a-t-il pas un problème avec session_unset () maintenant obsolète? J'ai vérifié cela et cela n'a pas fonctionné pour moi.
Navneet

@hakre quel est l'avertissement?
GoTo le

4
@GoTo: Cette session_unset a été utilisée pour annuler la définition des variables globales enregistrées en tant que variables de session comme cela était courant en PHP 4. L'utilisation de cette fonction à partir d'aujourd'hui est anachronique et n'est pas nécessaire. La seule raison pour laquelle il est toujours en PHP est probablement la rétrocompatibilité et rien d'autre. Si vous écrivez un nouveau code, vous ne devez pas l'utiliser. Si vous le trouvez dans le code, vous devez le supprimer avec les appels à session_register () et le reste des fonctions de gestion des variables de session PHP 4 à moins que vous ne traitiez explicitement du code PHP 4.
hakre

5
Pourtant, il est déroutant: veuillez décrire local $_SESSION variable instance vs session data in the session storage. Comme je sais, il y a 1000 personnes comme moi qui n'ont pas compris votre point. Merci
Pratik

1
Votre réponse est trop confuse. Veuillez envisager de le modifier, car je pense toujours que les deux sont en
train de

17

session_destroy(); supprime toute la session.

session_unset();supprime uniquement les variables de la session - la session existe toujours. Seules les données sont tronquées.


15
session_unset();

Effacez simplement toutes les données de toutes les variables de session.


session_destroy();

Supprimer toute la session.


Exemple :

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]est NULL.


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]est 1234.


Donc, je vais utiliser:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;

2
dans votre exemple du milieu -> session_unset();vous ne faites rien car vous pouvez toujours utiliser session of $_SESSION["a"] , alors à quoi sert-il?
Pratik

1
$_SESSION[a]devrait être $_SESSION['a'] et contrairement à ce que vous avez dit ce n'est PAS NULL dans votre premier exemple
Istiaque Ahmed

5

session_unset()effacera la $_SESSIONvariable (comme dans array()), mais ne touchera pas le fichier de session. Mais quand le script se termine; l'état du $_SESSIONsera écrit dans le fichier. Ensuite, il effacera le fichier mais ne le supprimera pas. Lorsque vous l'utilisez, session_destroy()il ne touchera pas $_SESSION(Utiliser var_dump($_SESSION)après session_destroy()), mais supprimera le fichier de session, donc lorsque le script se terminera, il n'y aura pas de fichier pour écrire l'état du $_SESSION.


0

session_destroy()supprimera la session après avoir déplacé la page et session_unset()supprimera la session lorsque le code sera exécuté.


0

J'ai essayé d'utiliser en session_unset($_SESSION['session_name'])pensant qu'il ne définira qu'un nom de session spécifique ou individuel / unique. Mais utiliser session_unset($_SESSION['session_name'])ne fera que désactiver tous les noms de session. Le bon code à utiliser est uniquement unset($_SESSION['session_name'])si vous souhaitez désactiver un seul nom de session.


0

session_start (); # il créera un tableau virtuel (associatif) dans la mémoire en temps réel du navigateur

deux éléments ajoutés

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

tester le bloc 1, 2 ou 3 individuellement en commentant les autres


-2

Je pense que session_destroy () et session_unset () devraient être utilisés en même temps pour s'assurer que les données de session sont sûrement supprimées.


Je pense que cela signifie que vous n'êtes pas sûr de la réponse. Cela devrait être un commentaire et non une réponse.
Shaiful Islam

4
session_unset()après session_destroy()serait inutile. Utilisez session_unset()pour effacer toutes les clés et valeurs de la superglobale $ _SESSION, ou utilisez session_destroy()pour supprimer toute la session; n'utilisez pas les deux juste pour "vous assurer", faites confiance à la fonction pour faire son travail.
redburn

@redburn session_destroy()ne désactive pas la variable superglobal sess avant de quitter la page actuelle.
Yousha Aleayoub
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.