【问题标题】:Page isn't reloading after redirect重定向后页面未重新加载
【发布时间】:2013-01-05 23:17:57
【问题描述】:

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

在首页(index.php) 上,用户使用登录表单登录,然后在login.php 中对其进行评估。如果数据不正确,用户将被重定向回主页,其中应显示错误消息,并保存在$_SESSION['error'] 中。显示消息后,该变量被取消设置以确保它只显示一次(如果用户重新加载页面,则不会再次显示)。仅供参考,整个网站都使用 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();

【问题讨论】:

  • 通过“error_reporting(E_ALL); ini_set('display_errors');”开启错误报告它可以说诸如“标头已发送”之类的内容
  • 您确定会话已正确启动吗?
  • 为什么不使用元重定向...我希望我的建议不是题外话...另外,错误报告呢?他们怎么说?

标签: php redirect header buffer reload


【解决方案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);

【讨论】:

  • 我同意,打开你的错误,这样你就可以在你的开发工作中足智多谋。
  • 我检查了 1 和 2。3 应该没有问题,因为 header 不受缓冲区的阻碍,只有在发送的情况下。并且没有发送。我也设置了error_reporting,但没有得到任何通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多