我正在使用简单的登录脚本在网站上工作。情况如下:重定向后不重新加载
在首页(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']);
}
编辑: 好的,我应该添加一些更多的细节。是的,错误报告是为所有错误和警告设置的,不,我没有得到任何错误和警告。 另外,缓冲区或会话不应该有问题,至少不要使用安装程序。这两个文件开始喜欢这个,没有什么是头()语句之前发送到客户端:
session_start();
ob_start();
通过“error_reporting(E_ALL); ini_set('display_errors');”打开错误报告它可以说类似“标题已发送” – kirugan
你确定你的会话是否正确启动? – Nic
为什么不使用元重定向...我希望我的建议不是偏题...另外,错误报告呢?他们说什么 ? –