PHP会话未按预期工作

PHP会话未按预期工作,php,session,session-variables,Php,Session,Session Variables,因此,我正在创建一个应用程序(sessions的新版本),并尝试使用sessions创建一个简单的错误处理语句 为了简化事情,让我描述一下基本情况 用户在第1页输入查询 用户按提交 加载第2页以检查查询的值 如果设置了查询,则会运行该查询并在第3页显示结果 但是,如果为空,则会捕获、设置错误并将用户重定向回第1页 我关心的是最后一步,因为我因为某种原因无法让它工作 以下是与错误相关的代码: 第1s页相关代码: <?php session_start(); $ERROR = $_SES

因此,我正在创建一个应用程序(sessions的新版本),并尝试使用sessions创建一个简单的错误处理语句

为了简化事情,让我描述一下基本情况

  • 用户在第1页输入查询
  • 用户按提交
  • 加载第2页以检查查询的值
  • 如果设置了查询,则会运行该查询并在第3页显示结果
  • 但是,如果为空,则会捕获、设置错误并将用户重定向回第1页
我关心的是最后一步,因为我因为某种原因无法让它工作

以下是与错误相关的代码:

第1s页相关代码:

<?php
session_start();

$ERROR = $_SESSION['error'];

if($ERROR) {
    echo $ERROR;
}

?>

第2页:

<?

session_start();

---------------- And as we go down the file a bit ----------------

if(trim($getQuery == "")){
    $ERROR = "no search criteria entered";

    $_SESSION['error'] = $ERROR;

    if(!isset($_SESSION['error'])) {
        die("the session error was not set for some reason");
    }

    $url = "localhost:8000/mysite"; //index.php is page 1 in this case so I just redirect to the parent directory as index is loaded by default obviously in that case

    header("Location:" . $url);
}
?>

$getQuery是在第1页的查询框中捕获的值,并通过post方法发送到第2页,这是您可以自然假设的

但是,当我在查询框中不输入任何内容,然后发送查询时,页面会刷新(当第2页意识到查询为空且页眉位置重新加载页面时,页面会刷新),但不会显示任何错误,应该考虑到我在第2页检查是否设置了该错误

有什么想法吗

干杯,
--SD

有时浏览器重定向(您的标题(“位置”)可能比服务器更快

就在重定向之前,您应该

session_write_close()

只是为了确保下次编写会话。

您在
if(trim($getQuery==“”){…}
中有一个输入错误,它应该是
if(trim($getQuery==“”){…}
,因为您只想修剪
$getQuery
变量,而不是整个条件。如果你改变这一点,它就会起作用

下面是一个最低限度的工作示例

<?php // 1.php
session_start();
$ERROR = $_SESSION['error'];
if($ERROR) {
    echo $ERROR;
}
?>




您的浏览器中是否设置了phpsessid cookie?看起来您的
放错了位置。你有
if(trim($getQuery==”)
,但我想你想要
if(trim($getQuery==”)
@Sean为什么你更喜欢使用那种方法而不是OP当前使用的方法呢?哦,这现在显示了错误,但现在我的问题是,当我重新加载时,会话错误仍然显示,当用户刷新或做其他事情时,我是否可以添加某种选项来销毁会话;
header(“Location”)
不是服务器(即php)重定向,不是浏览器重定向吗?如果浏览器不是接受重定向,则在重定向后粘贴一个
exit
。header(“Location”)只是向浏览器发送一个头,告诉它重定向。是的,遵循Terminus关于重定向后退出的建议-但原因不同。它可以确保脚本终止,但不会对浏览器是否接受重定向产生任何影响。
<?php // 2.php
$getQuery = ""; // This is empty so it will redirect to 1 and show error message
session_start();
if(trim($getQuery) == ""){
    $ERROR = "no search criteria entered";

    $_SESSION['error'] = $ERROR;

    if(!isset($_SESSION['error'])) {
        die("the session error was not set for some reason");
    }
    $url = "1.php"; //index.php is page 1 in this case so I just redirect to the parent directory as index is loaded by default obviously in that case
    header("Location:" . $url);
}
?>