今天我有点奇怪。
我发现显然我不能使用会话变量,然后销毁它(不销毁整个会话。)
让我解释一下。如果我这样做,例如:
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文档中得到了回答:https://www.php.net/manual/en/reserved.variables.session.php#85448
请注意,如果将register_globals设置为On,则全局变量与$ _SESSION变量关联的是引用,因此这可能导致一些奇怪的情况。
这是一个奇怪的情况,但没有记录在案。如果您想进一步了解php为什么以这种方式处理会话变量,我敢肯定,您可以进一步研究。