Heim > Backend-Entwicklung > PHP-Tutorial > unset($_SESSION) 不蘊涵 unset($_SESSION['id'])

unset($_SESSION) 不蘊涵 unset($_SESSION['id'])

WBOY
Freigeben: 2016-06-06 20:40:43
Original
1228 Leute haben es durchsucht

<code>$_SESSION['id'] = 1;
</code>
Nach dem Login kopieren
Nach dem Login kopieren

用了 unset($_SESSION); 下次刷新页面 session_start(); 后,

$_SESSION['id'] 的值 = 1又取出来了 !

而用 unset($_SESSION['id']); 则可以正常清除 !


谁能详细讲讲, 谢谢 !

回复内容:

<code>$_SESSION['id'] = 1;
</code>
Nach dem Login kopieren
Nach dem Login kopieren

用了 unset($_SESSION); 下次刷新页面 session_start(); 后,

$_SESSION['id'] 的值 = 1又取出来了 !

而用 unset($_SESSION['id']); 则可以正常清除 !


谁能详细讲讲, 谢谢 !

由於實現細節,「字面上」並不總是顯而易見地對應「實際上」。

unset($_SESSION['id']) 改變的是 $_SESSION 對象的值;
unset($_SESSION) 改變的是 $_SESSION 的引用,並沒有改變 $_SESSION 對象。

只有改變 $_SESSION 對象,纔會改變實際的 Session。

然而,如果 $_SESSION = [];,則可以達到清空 Session 的目的。

這說明,直接賦值於 $_SESSION 變量,也可以改變 $_SESSION 對象。

所以,我猜測,PHP 引擎會根據 $_SESSION 變量最終引用的對象,修改 Session;如果沒有 $_SESSION 變量,則跳過這一步。

当前这个请求的 context 中, $_SESSION 这个变量实际是指向存储 session 值的数组的引用。

unset($_SESSION) 只是把当前这个请求的 context 中的 $_SESSION 这个变量写空了,并没有实际动到存储 session 的值的数组。

下一次请求的时候,自然又会把下一次请求的 context 中的 $_SESSION 变量指向存储 session 值的数组的引用。

其实 kmxz 说的很清楚了,
无论是$_GET还,$_POST,$_COOKIE还是$_SESSION,
他们本身是php的一个变量,
当一个请求来的时候,zend会解析query_string,body,HTTP_COOKIE,phpsessionid,
然后将值装入上面那几个变量中,其中session是存在/tmp里头的文件里,文件名称就是phpsessionid值(均指默认情况下)。
session的存储文件是有一定几率触发删除的,如果没有被删除,
下次请求的时候,zend又会根据phpsessionid的值找到session文件,然后读取并反序列化(非php的unserialize函数)后重新装进了$_SESSION里,所以id又有值了。
而你 unset($_SESSION['id'])后,改变了/tmp里的对应id的值(其实被删了),所以重新请求后,id就没有了。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage