PHP重定向在Firefox 24.0中不起作用

PHP重定向在Firefox 24.0中不起作用,php,firefox,redirect,Php,Firefox,Redirect,我正在开发一个需要登录的站点。我使用setup index.php检查客户端是否使用会话cookie登录;如果没有,它将重定向到处理登录逻辑的login.php。当用户在登录表单中输入他们的凭证时,它会发布到login.php,由它进行身份验证。如果可以的话,它应该重定向回index.php,它完成了大部分工作。整个设置在InternetExplorer10和Chrome30中运行良好。然而,在Firefox24中,从index.php到login.php的初始重定向工作正常,但从login.p

我正在开发一个需要登录的站点。我使用setup index.php检查客户端是否使用会话cookie登录;如果没有,它将重定向到处理登录逻辑的login.php。当用户在登录表单中输入他们的凭证时,它会发布到login.php,由它进行身份验证。如果可以的话,它应该重定向回index.php,它完成了大部分工作。整个设置在InternetExplorer10和Chrome30中运行良好。然而,在Firefox24中,从index.php到login.php的初始重定向工作正常,但从login.php到index.php的重定向不正常;我得到的只是一张空白页。但奇怪的是,如果我试图在Firefox中“查看页面源代码”,我会在代码视图窗口中看到“文档过期”。当我单击“重试”时,源代码会弹出,好像它已成功重定向到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;
  }
}
if(isset($\u POST['login'])){
$contents=tnRequest(…);//获取描述用户的XML文档
$xml=simplexml\u load\u字符串($contents);
如果($xml->STATUS==0){
如果($xml->PASSCHANGE==1){//强制更改密码
包括('header.php');
密码形式($puser,$ppass);
包括('footer.php');
出口
}
//用户登录正常,没有强制更改密码。
//将数据加载到会话变量并重定向到index.php
加载用户数据($xml);
标题('Location:./index.php');
出口
}否则{//登录失败,请重试
会话\u重新生成\u id(true);
包括('header.php');
echo“登录错误,请重试。”;
loginform();
包括('footer.php');
出口
}
}

不幸的是,这是一个间接的答案

在过去,我对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;
  }
}
if(isset($\u POST['login'])){
$contents=tnRequest(…);//获取描述用户的XML文档
$xml=simplexml\u load\u字符串($contents);
如果($xml->STATUS==0){
如果($xml->PASSCHANGE==1){//强制更改密码
包括('header.php');
密码形式($puser,$ppass);
包括('footer.php');
出口
}
//用户登录正常,没有强制更改密码。
//将数据加载到会话变量并重定向到index.php
加载用户数据($xml);
?>

尝试更新头调用以删除“/index.php”前面的.from。我在这里没有看到任何明显的内容。那么它是否真的输入了您的条件有吗?如果有,您是否调试以查看执行结束的位置?检查了Apache日志?您是否可以使用相同的代码和浏览器在此处复制它:正在输出哪些其他标头?您是否要求在每个视图中重新创建“安全”页面,或者是否缓存这些页?@ZathrusWriter如果我用print\r替换标头调用($_SESSION),它打印出预期的会话变量,因此执行就到此为止。它在IE和Chrome中也可以工作。Apache或PHP日志中没有错误,而在Apache访问日志中,它只是在login.PHP上有一个post,但在index上没有任何内容。php@Jasper以下是其他标题(尽管我不得不承认我没有设置PHP或Apache,所以我不知道它们是否正确).Cache Control:no store,no Cache,must revalidate,post check=0,pre check=0 Pragma:no Cache Location:./index.php内容长度:0 Keep Alive:timeout=5,max=100连接:Keep Alive如果用户禁用了JS怎么办?如果他正在使用的系统允许禁用javascripts(这是极不可能的),那么这个答案就不完整了。我提到这是一个间接答案。JS肯定是我们网站的一个要求,所以这可能会起作用。对于禁用JS的浏览器,解决方案是在需要时除了使用JS重定向外,还使用META重定向