我正在开发一个需要登录的网站。 我有设置索引.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 发送标头。
祝你好运!