PHP重定向无法在Firefox 24.0中运行

时间:2013-10-14 16:11:37

标签: php firefox redirect

我正在开发一个需要登录的网站。我已经设置了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;
  }
}

1 个答案:

答案 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发送标题。

祝你好运!