我正在开发一个需要登录的网站。我已经设置了index.php来检查客户端是否使用会话cookie登录;如果没有,它会重定向到处理登录逻辑的login.php。当用户将他们的凭证输入登录表单时,它会发送到login.php进行身份验证。如果没关系,它应该重定向回index.php,它完成大部分工作。整个设置在Internet Explorer 10和Chrome 30中运行良好。但是,在Firefox 24中,从index.php到login.php的初始重定向工作正常,但不是从login.php重定向到index.php;我得到的只是一个空白页面。但奇怪的是,如果我尝试在Firefox中“查看页面源”,我会在代码视图窗口中看到“文档已过期”。当我再次单击“try”时,会弹出源代码,就像它已成功重定向到index.php一样。
我很确定这不是一个虚幻的空白问题,因为它可以在Chrome和IE中运行,并且它在以前的Firefox中工作(更不用说它在查看页面源时有效)。任何意见,将不胜感激。下面是一个login.php的片段,用于执行重定向。
if(isset($_POST['login'])) {
$contents=tnRequest(...); // this gets an XML document describing the user
$xml=simplexml_load_string($contents);
if($xml->STATUS==0) {
if($xml->PASSCHANGE==1) { // force a password change
include('header.php');
passwdform($puser,$ppass);
include('footer.php');
exit;
}
// user logged in okay, no forced password change.
// load data into session variable and redirect to index.php
load_user_data($xml);
header('Location: ./index.php');
exit;
} else { // login failed, try again
session_regenerate_id(true);
include('header.php');
echo "<Center><font color='red'><strong>Incorrect login, please try again.</font></center>";
loginform();
include('footer.php');
exit;
}
}
答案 0 :(得分:0)
遗憾的是,这是一个间接的答案。
过去我在PHP重定向方面遇到过很多问题。我已经切换到javascript重定向,它具有相同的目的,但避免了所有的标题麻烦。尝试:
if(isset($_POST['login'])) {
$contents=tnRequest(...); // this gets an XML document describing the user
$xml=simplexml_load_string($contents);
if($xml->STATUS==0) {
if($xml->PASSCHANGE==1) { // force a password change
include('header.php');
passwdform($puser,$ppass);
include('footer.php');
exit;
}
// user logged in okay, no forced password change.
// load data into session variable and redirect to index.php
load_user_data($xml);
?>
<script type="text/javascript">
<!--
window.location = "./index.php"
//-->
</script>
<?php
exit;
} else { // login failed, try again
session_regenerate_id(true);
include('header.php');
echo "<Center><font color='red'><strong>Incorrect login, please try again.</font></center>";
loginform();
include('footer.php');
exit;
}
}
如果这不起作用那么问题可能在index.php的地址(尝试/index.php而不是./index.php甚至index.php,它取决于你的web根的位置) 。如果没有,你必须有一个空格或一些html字符阻止PHP发送标题。
祝你好运!