2013-01-05 92 views
-1

我正在使用简单的登录脚本在网站上工作。情况如下:重定向后不重新加载

在首页(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(); 
+1

通过“error_reporting(E_ALL); ini_set('display_errors');”打开错误报告它可以说类似“标题已发送” – kirugan

+0

你确定你的会话是否正确启动? – Nic

+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); 
+0

我同意,把你的错误,所以你可以在你的发展努力足智多谋。 – Supplement

+0

我检查了1和2. 3不应该是一个问题,因为标题不受缓冲区的阻碍,只有当它被发送时。并没有发送。 我也设置了error_reporting,但没有注意任何事情。 – user1842665