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?
la source
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. Mercisession_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.la source
Exemple :
session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a;
session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a;
Donc, je vais utiliser:
session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a;
la source
session_unset();
vous ne faites rien car vous pouvez toujours utiliser session of$_SESSION["a"]
, alors à quoi sert-il?$_SESSION[a]
devrait être$_SESSION['a']
et contrairement à ce que vous avez dit ce n'est PAS NULL dans votre premier exemplesession_unset()
effacera la$_SESSION
variable (comme dansarray()
), mais ne touchera pas le fichier de session. Mais quand le script se termine; l'état du$_SESSION
sera é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
(Utiliservar_dump($_SESSION)
aprèssession_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
.la source
session_destroy()
supprimera la session après avoir déplacé la page etsession_unset()
supprimera la session lorsque le code sera exécuté.la source
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 utilisersession_unset($_SESSION['session_name'])
ne fera que désactiver tous les noms de session. Le bon code à utiliser est uniquementunset($_SESSION['session_name'])
si vous souhaitez désactiver un seul nom de session.la source
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
la source
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.
la source
session_unset()
aprèssession_destroy()
serait inutile. Utilisezsession_unset()
pour effacer toutes les clés et valeurs de la superglobale $ _SESSION, ou utilisezsession_destroy()
pour supprimer toute la session; n'utilisez pas les deux juste pour "vous assurer", faites confiance à la fonction pour faire son travail.session_destroy()
ne désactive pas la variable superglobal sess avant de quitter la page actuelle.