即使设置了值,PHP $_SESSION 也返回空数组

标签 php session

我正在尝试诊断 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) {...}

重现错误:

  1. 加载页面。这里没问题;顶部的 var_dump($_SESSION) 返回 array(0) {},这是预期的,底部的返回一个三元数组,也符合预期.
  2. 提交带有查询字段内容的表单(以击败验证)。尽管在之前的页面加载时设置了 $_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/

相关文章:

php - Laravel phpunit 拒绝用户访问

php - 动态 php 表中的问号后链接被切断

java - Hibernate Java 中的 session 和事务

session - ColdFusion中J2EE session 管理的缺点

php - 为什么人们以散列形式保存 session 数据?

php - 具有多种功能的 jQuery 插件

php - 如何在跟踪数据集更改的同时最好地构建数据库

php - 将日期值插入 MySQL

php - session 注册不起作用

php - 为什么在 Session_Start() 之前不能输出任何内容?