重定向后页面没有重新加载

时间:2013-01-05 23:17:58

标签: php redirect header buffer reload

我正在使用简单的登录脚本开发网站。情况就是这样:

在首页(index.php)上,用户使用登录表单登录,然后在login.php中对其进行评估。如果数据不正确,则会将用户重定向回主页,其中应显示错误消息,并保存在$_SESSION['error']中。显示消息后,该变量未设置以确保它仅显示一次(如果用户重新加载页面则不再显示)。只有fyi,整个网站都使用ob_*函数进行缓冲。

现在的问题是,在重定向回到首页后(例如,如果密码错误),它没有重新加载页面而是显示旧版本,就像没有请求或回答一样所有。问题必须是服务器端,因为在我手动重新加载之前也不会显示错误文本(因此代码之前没有再次执行过)。

我还尝试在重定向之前删除了缓冲区

ob_end_clean();
header("Location: " . HOME); 

或在标题中设置缓存:

header( "Cache-Control: no-store, no-cache, must-revalidate" ); 

(当然这是客户端,但无论如何我都试过了。)

有人知道如何解决这个问题或为什么会发生这种情况?

提前致谢

登录-重定向:login.php

//other code
if (!PwHash::check_password($db_password, $input['password'])) {
    $_SESSION['error'] = TRUE;
    $_SESSION['error_type'] = 'login';
    header("Location: " . HOME);    //HOME holds the default path
    exit;
} else {
    //other code

错误输出:index.php

if (isset($_SESSION['error']) AND $_SESSION['error'] == TRUE) {
    //error output
    unset($_SESSION['error']);
}


修改 好的,我应该补充一些细节。是的,为所有错误和警告设置了错误报告,不,我没有得到任何错误和警告。 此外,缓冲区或会话应该没有问题,至少不是设置。两个文件都是这样开始的,并且在header()语句之前没有任何内容发送到客户端:

session_start();
ob_start();

1 个答案:

答案 0 :(得分:1)

首先确保以下内容:

1-You do session_start();
2-No output was sent to buffer before you session_start();
3-No output was sent to buffer before header();

然后通过添加

来调试代码
ini_set("display_errors","on");
error_reporting(E_ALL);