Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\会话未设置问题_Php_Session - Fatal编程技术网

Php $\会话未设置问题

Php $\会话未设置问题,php,session,Php,Session,我有一个奇怪的例子,其中一个会话变量被取消设置。这似乎是由以下几行引起的: if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]); 然而,如果我删除if子句中的unset(),它就可以正常工作。奇怪的是,用任意文本代替unset(),什么也不出来(表示一切正常) 请记住$\u SESSION['search']实际上是一个数组(有时是多维的),有人能看到上面这行中可能导致$\u会话仍然未设置的任何问题吗

我有一个奇怪的例子,其中一个会话变量被取消设置。这似乎是由以下几行引起的:

if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);
然而,如果我删除if子句中的unset(),它就可以正常工作。奇怪的是,用任意文本代替unset(),什么也不出来(表示一切正常)

请记住$\u SESSION['search']实际上是一个数组(有时是多维的),有人能看到上面这行中可能导致$\u会话仍然未设置的任何问题吗

编辑:

例如,以下内容将呼应出“哈利路亚”:

if($_SERVER['SCRIPT_NAME'] != "/search.php") ;
if(isset($_SESSION["search"])) echo 'hallelujah';
但这不会(if语句的计算结果为false):


unset()?考虑到上下文,我不确定它的用途。

我感到困惑。发生了什么,应该发生什么?下面是代码的作用:如果您不在search.php上,则从数组
$\u会话中删除键
search
及其值。请用类似的词语描述一下你认为是什么问题

if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);
if(isset($_SESSION["search"])) echo 'hallelujah';
如果第一个条件为true,则会取消“搜索”。这意味着第二个条件不会触发,这就是为什么你没有回应任何东西。这里有什么问题吗

编辑

在注释后添加了更多调试

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

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

好吧,我的错是,这实际上与404页面和htaccess重定向有关。实际上,404页面包含了相同的代码,并且以某种方式被htaccess文件包含,而htaccess文件又反过来取消了$\u会话值。好奇,但实际代码没有任何问题。

您的问题有点难以理解。如果您的问题是
$\u SESSION
是空的,通常您忘记先调用
SESSION\u start()
。我知道这很难描述,SESSION\u start最确切地被调用。这就是我的假设,我只是不明白为什么当if nothing通过if语句时,这一行仍然被操作。是的,如果我注释掉整行,它会工作,但我需要它在不在搜索页面时重置搜索值在这种情况下尝试使用变量。如果($\u SERVER['SCRIPT\u NAME']!=“/search.php”)isASearch=true;是的,我仍然很困惑,当我在/search.php上时,值总是false当我不在这个页面上时,值总是true。那么,为什么unset($\u会话)的行为不同呢??我很困惑。你是对的,如果我不在search.php上,那么键“search”将从$\u会话中删除。然而,令人困惑的是,在我们的服务器上,即使我们在search.phptry var_上,在if之前和之后转储会话数组时,此实现也会删除“search”键。确保没有if();unset()似乎是这里常见的错误。另一个问题可能是——转储将显示会话处理程序已损坏。是的,但我的观点是if语句的计算结果为false。在这两种情况下。如果我通过在这个语句中定义一个变量来测试这一点,那么这个变量显然没有定义。那么,你知道为什么unset()显然被执行了吗?你是说第一个IF是假的?查看我的编辑并告诉我您获取的var_dump返回bool(false)的结果。bizare的问题是,这只发生在我们的一个服务器实现上。谢谢您的帮助。请尝试添加括号并检查。可能是一个奇怪的范围问题<代码>如果($_服务器['SCRIPT\u NAME']!=“/search.php”){var\u转储($_服务器['SCRIPT\u NAME']!=”/search.php”);未设置($_会话['search']);}
。如果您有调试器,请运行该调试器。
if($_SERVER['SCRIPT_NAME'] != "/search.php") unset($_SESSION["search"]);
if(isset($_SESSION["search"])) echo 'hallelujah';
var_dump($_SERVER['SCRIPT_NAME'] != "/search.php")