2013-04-05 115 views
1

根據手冊「不要使用未設置($ _ SESSION)取消設置整個$ _SESSION,因爲這將會通過$ _SESSION超全局禁用會話變量的註冊。」未設置會話php

<?php 
session_start(); 

$_SESSION['name'] = 'my_name'; 

unset($_SESSION); 

echo $_SESSION['test'] = 'ok'; 

所以根據手冊,上面的代碼不應該註冊最後一條語句。但是代碼輸出字符串'ok'。這裏發生了什麼?

+1

「它不會設置變量」!=「你不能設置變量」 – Emissary 2013-04-05 14:43:26

+0

一旦你沒有設置會話,它可以自由地存儲新的值,它不會像它永遠消失。取消設置僅清除當前值。 – 2013-04-05 14:46:45

回答

3

它不禁用會話。它只是禁用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,它只會失敗。

1

這是一個更好的測試用例:

session_start(); 
$_SESSION['test'] = 'value'; 
unset($_SESSION); 
var_dump($_SESSION); 

此代碼然而,將輸出「東西」,因爲你只是呼應之前爲它分配。

echo $_SESSION['something'] = 'something'; 
0

我相信它的意思是,$_SESSION['test']不會自動在會話中更多的保存。如果您在另一頁上打印$_SESSION['name'],應該是myname,但$_SESSION['test']應該是空的。