unset session php

时间:2013-04-05 14:42:04

标签: php

根据手册“请勿使用未设置($ _ SESSION)取消整个$ _SESSION,因为这将禁用通过$ _SESSION超全局注册会话变量。”

<?php
session_start();

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

unset($_SESSION);

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

因此根据手册,上面的代码不应该注册最后一个语句。但代码输出字符串'ok'。这里发生了什么?

3 个答案:

答案 0 :(得分:3)

它不会禁用会话。它只是禁用session_register的使用。这不是什么大问题,因为session_register已被弃用了很长时间:

e.g。使用此代码:

<?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 :(得分:1)

这是一个更好的测试用例:

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

然而,这段代码会输出'something',因为你只是在回显之前分配它。

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

答案 2 :(得分:0)

我认为这意味着$_SESSION['test']不会再自动保存在会话中。如果您在其他页面上打印$_SESSION['name'],则应该是myname,但$_SESSION['test']应为空。