【问题标题】:$_SESSION variable not setting value$_SESSION 变量未设置值
【发布时间】:2021-11-29 04:56:01
【问题描述】:

[已解决]
在我的 login.php 中,设置了几个 $_SESSION 变量。
我最近添加了另一个 = $_SESSION['darkM'] = false;
执行 var_dump($_SESSION);(结果如下),我的其他变量的值设置得很好,但是这个不会

我尝试将其设置为 字符串 ('test'),但在 var_dump 中仍然返回空。只有这个变量不会设置。
我检查了我的error_log,什么都没有!澄清一下,session_start(); 已经设置在我声明变量的上方。知道为什么会发生这种情况吗?


----- 编辑 -----

Login.php

<?php
session_start();

   // Store data in session variables
   $_SESSION["loggedin"] = true; // No error
   $_SESSION["tenant"] = $tenant; // No error
   $_SESSION['darkM'] = false; // Also tried setting to 'test'

VAR_DUMP($_SESSION)

Array ( [loggedin] => 1 [tenant] => Coledon  [darkM] => )

已解决

我不知道这有什么不同,但我将变量 $_SESSION['darkM'] 更改为 $_SESSION['dark_mode']。 再做一次var_dump,新结果是: 数组(1){ ['dark_mode']=> 布尔(假) }

所以我不再有问题,但仍然不知道为什么会发生这种情况?没有打字问题/隐藏字符。
另外,如果有人遇到同样的问题,请查看 navnathReflective 的答案 - 重要的是要记住!

【问题讨论】:

  • 你应该分享你的代码而不仅仅是描述
  • 所以“session_start(); 已经设置在我声明变量的位置上方”,你是说在设置这个$_SESSION['darkM'] = false;. 之前你已经调用了session_start() 对吗?如果不是,那将导致您所描述的情况。
  • @Salvino -- 没错,是的。我也认为这是我的错误,但它的放置正确:(
  • @Coledon_Projects 使用var_dump() 而不是print_r() 进行调试(您得到的输出来自print_r())。还有edit你的问题包括你遇到的问题的minimal reproducible example
  • 您是否尝试重新输入整行,以防有一些不可见的字符阻止代码执行。你也试过把它放在第一位吗?

标签: php session-variables var-dump


【解决方案1】:

布尔值 TRUE 转换为字符串“1”。 Boolean FALSE 被转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

Doc

【讨论】:

  • 感谢 navnath 的回答,这是正确的。我还尝试将变量的值更改为字符串,它抛出了同样的错误。
  • 现在的错误是什么?你仍然没有得到它的价值吗?
  • 刚刚又查了一下,结果是:array(1) { ["darkM"]=&gt; } -- 不知道为什么会这样
  • error_reporting(E_ALL); 报告所有错误
  • 大家我已经更新了我的问题 - 更改变量名称解决了问题。但是当我再次尝试旧名称时,问题又回来了......
【解决方案2】:

完全没有问题,只是print_r 对待false 的方式与您预期的不同。使用var_dump,因为它显示了变量的值和类型,而不是像print_r那样将它们转换为字符串。

<?php
    session_start();
    $_SESSION['darkMode'] = false;
    print_r($_SESSION);
    var_dump($_SESSION);
?>

输出

Array
(
    [darkMode] => 
)

array(1) {
  ["darkMode"]=>
  bool(false)
}

【讨论】:

  • 感谢反射的回答,这是正确的。我还尝试将变量的值更改为字符串,它抛出了同样的错误。
  • 无论如何我这个答案都没有帮助,对不起@Reflective。原因是@Coledon_Projects 已经在问题中提到他尝试为同一个变量设置一个字符串值test,但它没有被设置。忽略他还提到在代码中使用var_dump 而不是print_r 的事实。我并没有对此表示反对,但我真的认为这只是冗长且不必要的。
  • 大家我已经更新了我的问题 - 更改变量名称解决了问题。但是当我再次尝试旧名称时,问题又回来了......
  • @Reflective 是的,我明白。我只是说它不应该是一个答案。但更多的是对这个问题的评论。如您所见,它仍然没有回答为什么变量没有显示,而只是将海报转移到编码实践中。
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 2013-12-25
  • 2020-09-04
  • 2012-10-08
  • 1970-01-01
  • 2012-11-19
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多