繁体   English   中英

为什么我的php重定向不起作用?

[英]why doesn't my php redirect work?

我正在写一个登录脚本。 我的db.php没有回显/打印任何内容,所以为什么没有header(“ 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();
        }
    ?>

仅在调用函数之前脚本未发送任何输出的情况下,函数头才起作用。 检查上面的代码是否回显了某些内容。

如果不是,请检查上面的包含文件,在结束的“?>”标记后没有多余的空格或换行符。 否则,该空格或换行符将在标题之前发送到浏览器。

您确定脚本(或db.php)中的任何地方都没有产生输出吗? 甚至没有几个多余的空间?

尝试使用完整的URL,例如:

header("Location: http://www.mysite.com/index.php");

某些浏览器(感谢IE)无法理解URI未完成的301重定向代码。

PHP中的标头定位行为是一个很好的工具,但是很容易在不正确的情况下实现...为此,我将考虑使用require()代替header(location)

喜欢:

if (!imLoggedIn()){
  require('loginForm.php');
  exit;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM