我正在写一个登录脚本。我的db.php没有回显/打印任何东西,所以为什么不是标题(“Location:index.php”);成功登录后重定向?登录信息是正确的。我知道我需要对输入进行消毒,但目前这不是问题。
<?php
require('db.php');
$username = $_POST['un'];
$password = $_POST['pw'];
$qry="SELECT uid FROM users WHERE name='$username' AND pass='".md5($password)."'";
$result=mysql_query($qry);
if(mysql_num_rows($result) == 1){
session_regenerate_id();
$user = mysql_fetch_assoc($result);
$_SESSION['S_UID'] = $user['uid'];
session_write_close();
header("Location: index.php");
exit();
}else{
echo "<center><form action='index.php' name='login'>Login failed! Please try again with correct username and password.<br><input type='submit' name='failed' value='Return to Login'></form></center>";
exit();
}
?>
答案 0 :(得分:2)
只有在调用函数之前脚本没有发送输出时,函数头才有效。检查上面的代码是否有回应。
如果没有,请检查上面的包含文件在结束“?&gt;”后没有多余的空格或换行符标签。否则,此空格或换行符将在标题之前发送到浏览器。
答案 1 :(得分:0)
您确定脚本(或db.php)中的任何位置都没有生成输出吗?甚至没有几个无关的空间?
答案 2 :(得分:0)
尝试使用完整的网址,例如:
header("Location: http://www.mysite.com/index.php");
有些浏览器(感谢IE)不理解带有未完成URI的301重定向代码。
PHP中的此标头位置行为是一个很好的工具,但很容易在不正确的情况下实现...为此我会考虑使用require()
而不是header(location)
像:
if (!imLoggedIn()){
require('loginForm.php');
exit;
}