根據手冊「不要使用未設置($ _ SESSION)取消設置整個$ _SESSION,因爲這將會通過$ _SESSION超全局禁用會話變量的註冊。」未設置會話php
<?php
session_start();
$_SESSION['name'] = 'my_name';
unset($_SESSION);
echo $_SESSION['test'] = 'ok';
所以根據手冊,上面的代碼不應該註冊最後一條語句。但是代碼輸出字符串'ok'。這裏發生了什麼?
根據手冊「不要使用未設置($ _ SESSION)取消設置整個$ _SESSION,因爲這將會通過$ _SESSION超全局禁用會話變量的註冊。」未設置會話php
<?php
session_start();
$_SESSION['name'] = 'my_name';
unset($_SESSION);
echo $_SESSION['test'] = 'ok';
所以根據手冊,上面的代碼不應該註冊最後一條語句。但是代碼輸出字符串'ok'。這裏發生了什麼?
它不禁用會話。它只是禁用session_register的使用。這不是什麼大問題,因爲session_register已被棄用了很長時間:
例如,與此代碼:
<?php
$foo = 'bar';
session_register('foo');
print_r($_SESSION);
unset($_SESSION);
session_register('foo', 'bar2');
print_r($_SESSION); // line 8
$_SESSION['foo'] = 'bar3';
print_r($_SESSION);
你
Array
(
[foo] =>
)
PHP Notice: Undefined variable: _SESSION in /home/marc/z.php on line 8
Array
(
[foo] => bar3
)
注意警告信息。您已取消設置$ _SESSION,然後嘗試session_register ...但這不會創建新$ _SESSION,它只會失敗。
這是一個更好的測試用例:
session_start();
$_SESSION['test'] = 'value';
unset($_SESSION);
var_dump($_SESSION);
此代碼然而,將輸出「東西」,因爲你只是呼應之前爲它分配。
echo $_SESSION['something'] = 'something';
我相信它的意思是,$_SESSION['test']
不會自動在會話中更多的保存。如果您在另一頁上打印$_SESSION['name']
,應該是myname
,但$_SESSION['test']
應該是空的。
「它不會設置變量」!=「你不能設置變量」 – Emissary 2013-04-05 14:43:26
一旦你沒有設置會話,它可以自由地存儲新的值,它不會像它永遠消失。取消設置僅清除當前值。 – 2013-04-05 14:46:45