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


PHP redirect not working in Firefox 24.0

我正在开发一个需要登录的网站。 我有设置索引.php以检查客户端是否使用会话cookie登录;如果没有,它将重定向到处理登录逻辑的登录.php。 当用户在登录表单中输入其凭据时,它会发布到登录.php登录进行身份验证。 如果没问题,它应该重定向回索引.php索引会完成大部分工作。 整个设置在Internet Explorer 10和Chrome 30中运行良好。 但是,在 Firefox 24 中,从 index.php 到 login.php 的初始重定向工作正常,但从 login.php 重定向到 index.php 则不行;我得到的只是一张白纸。 然而,奇怪的是,如果我尝试在Firefox中"查看页面源代码",我会在代码视图窗口中得到"文档过期"。 当我再次单击"重试"时,源代码会弹出,就好像它已成功重定向到index.php一样。

我很确定这不是一个幻影空格问题,因为它适用于 Chrome 和 IE,并且在以前的 Firefox 中确实有效(更不用说如果查看页面源代码,它可以工作)。 任何建议将不胜感激。 下面是一个登录片段.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;
  }
}
不幸的是,

这是一个间接的答案。

我过去在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;
  }
}

如果这不起作用,那么问题可能出在索引的地址.php(尝试/index.php而不是 ./index.php甚至是 index.php,这取决于您的 Web 根目录的位置)。 如果没有,您必须存在一个空格或一些 html 字符,这会阻止 PHP 发送标头。

祝你好运!