$ _SESSION未设置问题

时间:2011-02-24 00:21:31

标签: php session

我有一个bizzare案例,其中一个会话变量未被设置。它似乎是由以下行引起的:

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

然而,如果我删除if子句中的unset(),它可以正常工作。奇怪的是回复一些任意文本代替unset(),没有任何东西出来(表明一切都很好)。

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

编辑:

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

例如,以下内容将回应哈利路亚':

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

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

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

5 个答案:

答案 0 :(得分:1)

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

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

修改

在评论后添加了一些调试

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

当你把它打印出来的是什么?它是真的还是错的?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试评论整条线?鉴于上下文,我不确定它的目的是什么。

答案 3 :(得分:0)

我很困惑。会发生什么以及应该发生什么?以下是您的代码所执行的操作:如果您不在search.php上,则从数组search中删除键$_SESSION及其值。用类似的词语来描述你认为是一个什么问题?

答案 4 :(得分:0)

好的,我的坏,这实际上与404页面和htaccess重定向有关。实际上,404页面包含相同的代码,并以某种方式包含在htaccess文件中,而后者又取消了$ _SESSION值。好奇,但实际代码没有任何问题。