【问题标题】:$_SESSION unset issue$_SESSION 未设置问题
【发布时间】:2011-07-03 05:01:38
【问题描述】:

我有一个奇怪的情况,即未设置会话变量。它似乎是由以下行引起的:

if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);

而如果我删除 if 子句中的 unset() ,它就可以正常工作。奇怪的是回显一些任意文本代替 unset(),什么都没有出来(表明一切正常)。

请记住,$_SESSION['search'] 实际上是一个数组(有时是多维数组),任何人都可以看到上述行可能导致 $_SESSION 仍未设置的任何问题吗??

编辑:

include SERVER_ROOT.'/classes/session.class.php';
$sess = new Session();
session_start();

例如,以下将回显“hallelujah”:

if($_SERVER['SCRIPT_NAME'] != "/search.php") ;
if(isset($_SESSION["search"])) echo 'hallelujah';

但这不会(并且 if 语句的计算结果为假):

if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);
if(isset($_SESSION["search"])) echo 'hallelujah';

【问题讨论】:

  • 你的问题有点难以理解。如果您的问题是$_SESSION 为空,通常是您忘记先调用session_start()
  • 我知道它很难描述,session_start 肯定会被调用。

标签: php session


【解决方案1】:
if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);
if(isset($_SESSION["search"])) echo 'hallelujah';

如果第一个条件为真,则取消设置“搜索”。这意味着第二个条件不会触发,这就是为什么你没有回应任何东西。这里似乎有什么问题?

编辑

在评论后添加了一些调试

var_dump($_SERVER['SCRIPT_NAME'] != "/search.php")

你放这个的时候打印的是什么?这是真的还是假的?

【讨论】:

  • 是的,但我的意思是 if 语句评估为假。在这两种情况下。如果我通过在该语句中定义一个变量来测试这一点,那么该变量显然没有定义。那么,任何想法为什么 unset() 显然被采取行动?
  • 你的意思是第一个 IF 是假的?查看我的编辑并告诉我你得到了什么结果
  • var_dump 返回 bool(false)。
  • 奇怪的是这只发生在我们的服务器实现之一上。感谢您的帮助。
  • 尝试添加大括号并检查。可能是一个奇怪的范围问题。 if($_SERVER['SCRIPT_NAME'] != "/search.php") {var_dump($_SERVER['SCRIPT_NAME'] != "/search.php"); unset($_SESSION["search"]);}。如果您有调试器,请运行它。
【解决方案2】:

unset() 不关心值是数组还是多维 - 它会取消设置。

【讨论】:

  • 这就是我的假设,我只是不明白为什么当 if 没有通过 if 语句时,这条线仍然被执行。
【解决方案3】:

尝试注释掉整行?鉴于上下文,我不确定它的用途是什么。

【讨论】:

  • 是的,如果我注释掉整行,它会起作用,但我有点需要它来重置搜索值,而不是在搜索页面上
  • 在这种情况下尝试使用变量。 if($_SERVER['SCRIPT_NAME'] != "/search.php") isASearch = true;
  • 是的,我仍然感到困惑,当我在 /search.php 上时,该值始终为 false,而当我不在此页面上时,该值始终为 true。那么为什么 unset($_SESSION) 的行为不同呢?我很困惑。
【解决方案4】:

我很困惑。会发生什么,应该发生什么?这是您的代码的作用:如果您不在 search.php 上,则从数组 $_SESSION 中删除键 search 及其值。愿意用类似的话描述您认为的问题吗?

【讨论】:

  • 你是对的,如果我不在 search.php 上,那么键 'search' 将从 $_SESSION 中删除。然而,令人困惑的是,在我们的服务器上,即使我们在 search.php 上,这个实现也会删除“搜索”键
  • 在 if 前后尝试 var_dumping 会话数组。确保你没有 if (); unset() 在这里似乎是一个常见的错误。其他问题可能是 - 转储将显示您的会话处理程序已损坏。
【解决方案5】:

好吧,我的错,这实际上与 404 页面和 htaccess 重定向有关。实际上,404 页面包含相同的代码,并且不知何故被 htaccess 文件包含,这反过来又取消了 $_SESSION 值。很好奇,但实际代码没有任何问题。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2021-11-29
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多