Променливите на сесията не се унищожават дори при използване на session_destroy()

session_start();
$_SESSION['user'] = "789456";
$_SESSION['name'] = "dummy";
$_SESSION['id'] = "123";
print_r($_SESSION);
session_destroy();
echo "Session End";
print_r($_SESSION);

Моят резултат е:

Array ( [user] => 789456 [name] => dummy [id] => 123)
Session End :Array ( [user] => 789456 [name] => dummy [id] => 123) 

Не трябва ли изходът да бъде просто:

Array ( [user] => 789456 [name] => dummy [id] => 123)

Ако използвам session_unset() преди session_destroy(), тогава получавам резултата, който очаквам. Винаги ли е необходимо да се използва session_unset() преди session_destroy()?


person Pratul Baheti    schedule 02.04.2012    source източник


Отговори (2)


От документация:

session_destroy() унищожава всички данни, свързани с текущата сесия. Не деактивира никоя от глобалните променливи, свързани със сесията, нито деактивира бисквитката на сесията. За да използвате отново сесийните променливи, трябва да се извика session_start().

За да прекратите сесията напълно, като например да излезете от потребителя, идентификаторът на сесията също трябва да бъде деактивиран. Ако се използва бисквитка за разпространение на идентификатора на сесията (поведение по подразбиране), тогава бисквитката на сесията трябва да бъде изтрита. setcookie() може да се използва за това.

Най-лесният начин би бил: $_SESSION = array(); след обаждане на session_destroy();.

person scessor    schedule 02.04.2012

http://php.net/session_destroy

session_destroy() унищожава всички данни, свързани с текущата сесия. Той не деактивира нито една от глобалните променливи, свързани със сесията, нито деактивира сесийната бисквитка. За да използвате отново сесийните променливи, трябва да се извика session_start().

За да прекратите сесията напълно, като например да излезете от потребителя, идентификаторът на сесията също трябва да бъде деактивиран. Ако се използва бисквитка за разпространение на идентификатора на сесията (поведение по подразбиране), тогава бисквитката на сесията трябва да бъде изтрита. setcookie() може да се използва за това.

session_destroy изтрива данните от основното хранилище, но оставя $_SESSION сам. Когато опресните страницата, тя ще бъде празна.

Това, което можете да направите обаче, е просто да направите $_SESSION = array(); session_destroy(); (Въпреки че наистина това е почти излишно, тъй като session_destroy изтрива основните данни, но запазва същия идентификатор на сесията -- двата израза са основно едно и също нещо)

person Corbin    schedule 02.04.2012