1

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

<?php
session_start();

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

unset($_SESSION);

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

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

4

3 回答 3

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,它只是失败了。

于 2013-04-05T14:50:17.853 回答
1

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

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

但是,此代码将输出“某物”,因为您在回显之前分配了它。

echo $_SESSION['something'] = 'something';
于 2013-04-05T14:47:57.667 回答
0

我相信这意味着$_SESSION['test']不会再自动保存在会话中。如果您$_SESSION['name']在另一页上打印,它应该是myname,但$_SESSION['test']应该是空的。

于 2013-04-05T14:48:21.013 回答