我正在尝试诊断 PHP 问题。我将值传递给 $_SESSION
数组,而这些值未被数组采用。我使用 var_dump($_SESSION)
查看返回的内容,我得到了 array (0){}
。即使我知道正在设置 session 并且正在将值添加到数组中,也是如此。
这是我的代码 (index.php) 的简化版本:
<?php
session_start();
var_dump($_SESSION);
if ($_REQUEST['query'] == "" or is_null($_REQUEST['query'])) {
$errormsg = "You must enter a search term to query. Please try again.";
}
?>
<form name="product_search" id="product_search" method="post" action="index.php">
<input size="60" type="text" name="query" id="query" <?php echo "value=\"" . $_REQUEST['query'] . "\" "; ?>/>
<?php if (isset($errormsg)) {echo "<span class=\"errormsg\">" . $errormsg . "</span>";} ?>
<input type="submit" class="searchBtn" value="Search"/>
<?php
$_SESSION['query'] = 'foo';
$_SESSION['search_field'] = 'man';
$_SESSION['results'] = 'chu';
?>
var_dump($_SESSION); //Will dump array(3) {...}
重现错误:
- 加载页面。这里没问题;顶部的
var_dump($_SESSION)
返回array(0) {}
,这是预期的,底部的返回一个三元数组,也符合预期. - 提交带有查询字段内容的表单(以击败验证)。尽管在之前的页面加载时设置了
$_SESSION
变量,但第一个转储仍返回array(0) {}
。
我在这里简化了代码以解决问题,但我有另一个页面毫无困难地返回 $_SESSION 变量(并且第一个 var_dump
生成一个单成员数组)。这里的问题是我将表单提交给自己吗?如果是这样,除了 $_SESSION
数组之外,还有其他方法可以将值从一个页面加载传递到下一个页面吗?我查看了 PHP 文档并进行了高低搜索,但没有发现任何有用的信息。
我还应该注意到 session ID 在页面加载之间是相同的,因此 session 状态似乎在页面加载到页面加载之间保持不变。
在此先感谢您的帮助。
最佳答案
在每个网页的顶部使用这一行:
if (!isset($_SESSION)) { session_start(); }
如果将 $_SESSION
初始化为较低级别的脚本,则 `$_SESSION 变量在较高级别不可访问。
关于即使设置了值,PHP $_SESSION 也返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10519257/