【发布时间】:2012-05-18 03:43:39
【问题描述】:
我正在尝试诊断 PHP 问题。我将值传递给 $_SESSION 数组,而这些值不会被数组获取。我使用var_dump($_SESSION) 查看返回的内容并得到array (0){}。即使我知道正在设置会话并且正在将值添加到数组中也是如此。
这是我的代码的简化版本(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 文档并进行了高低搜索,但没有发现任何有用的信息。
我还应该注意,页面加载时会话 ID 是相同的,因此看起来会话状态从页面加载到页面加载都在保持。
提前感谢您的帮助。
【问题讨论】:
-
这段代码在我的环境中运行良好。可以包含一些占位符,如果不是代码的全部复杂性?
-
杰里米,当然。这是整个事情:
-
您的服务器可能配置不正确 - 没有对会话文件夹的可写访问权限?