$_SESSION['id'] = 1;
用了 unset($_SESSION); 下次刷新页面 session_start(); 后,
$_SESSION['id'] 的值 = 1又取出来了 !
而用 unset($_SESSION['id']); 则可以正常清除 !
谁能详细讲讲, 谢谢 !
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
由於實現細節,「字面上」並不總是顯而易見地對應「實際上」。
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 值的数组的引用。$_SESSION 是超全局数组,肯定在全局变量区,程序员对全局变量区是没有写权限的,只有读权限;
而$_SESSION['name']这样的键值在用户变量区,程序员对用户变量区有读写权限,所以可以unset($_SESSION['name']),而不能unset($_SESSION);
我想应该是这样