php5.6无法获取会话变量,然后删除该变量

问题描述 投票:0回答:1

今天我有点奇怪。

我发现显然我不能使用会话变量,然后销毁它(不销毁整个会话。)

让我解释一下。如果我这样做,例如:


if (isset($_SESSION['var'])) {
    $var = $_SESSION['var'];
    unset($_SESSION['var']);
}
var_dump($_SESSION);
echo "var: $var";

结果是“ var”既是$ var又是$ _SESSION都是空的。

但是,如果您注释掉未设置的部分,则var在$ var和$ _SESSION数组中。

甚至很多鸽友:

if (isset($_SESSION['var'])) {
    $var = array_splice($_SESSION, array_search('var', array_keys($_SESSION)), 1);   
}

似乎有完全相同的问题。

这太奇怪了。

出现这种奇怪的行为时,我什至可以做什么?

谢谢你。

编辑:我只是做了显而易见的明智之举:

$session_copy = $_SESSION;

if (isset($session_copy['var'])) {
    $var = $session_copy['var'];
    unset($_SESSION['var']);
}

是的,也无效。

php session php-5.6
1个回答
-1
投票

这在php文档中得到了回答:https://www.php.net/manual/en/reserved.variables.session.php#85448

请注意,如果将register_globals设置为On,则全局变量与$ _SESSION变量关联的是引用,因此这可能导致一些奇怪的情况。

这是一个奇怪的情况,但没有记录在案。如果您想进一步了解php为什么以这种方式处理会话变量,我敢肯定,您可以进一步研究。

© www.soinside.com 2019 - 2024. All rights reserved.