根据手册"不要使用unset($_SESSION)来取消整个$_SESSION,因为这会通过$_SESSION超全局变量禁用会话变量的注册。"
<?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…但是这不会创建一个NEW $_SESSION,它只是失败了。
这是一个更好的测试用例:
session_start();
$_SESSION['test'] = 'value';
unset($_SESSION);
var_dump($_SESSION);
然而,这段代码会输出'something',因为你在回显之前赋值了它。
echo $_SESSION['something'] = 'something';
我认为这意味着$_SESSION['test']
将不再自动保存在会话中。如果你在另一页打印$_SESSION['name']
,它应该是myname
,但$_SESSION['test']
应该是空的。