2013-04-05 87 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']应该是空的。