【问题标题】:php5.6 cannot fetch a session variable and THEN delete the variablephp5.6 无法获取会话变量,然后删除该变量
【发布时间】:2020-03-31 19:20:04
【问题描述】:

今天我有点奇怪。

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

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


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

结果是“var”为空,因为 $var 和 key 都是 $_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']);
}

是的,也不行。

【问题讨论】:

  • 从 5.2.3 到 7.4.0 似乎无法 replicate the problem
  • 似乎取决于响应中指出的 php 设置
  • session_start()在我们看不见的地方吗?
  • 正确,我在包含的文件中这样做。

标签: php session php-5.6


【解决方案1】:

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

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

这是一种奇怪的情况,但并非没有记录。如果您想了解更多关于 php 以这种方式处理会话变量的原因,我相信您可以进一步挖掘。

【讨论】:

  • 是的,我需要在两个请求之间保留数据,但我不能使用请求参数,因此,我希望我可以使用会话。
  • 然而,在第二次请求之后,我的会话变量变得毫无用处并且可能导致错误,所以我需要删除它们。
  • 您应该将其作为另一个具体问题提出。附言谢谢你今天教我一些关于php的东西,以前不知道。
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 2018-01-07
  • 2023-01-23
  • 1970-01-01
  • 2014-09-13
  • 2012-05-14
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多