用户应该登录并被重定向,不会重定向

时间:2014-09-15 12:41:51

标签: php redirect login

我有这个代码。当用户登录时,应该将它们重定向到members.php。它不是重定向它们,而是显示一个空白的白页,但保留在login.php。

有人可以帮忙吗? 这是代码:

<?php 
 mysql_connect("xx", "xx", "xx") or die(mysql_error()); 
 mysql_select_db("xx") or die(mysql_error()); 

 if(isset($_COOKIE['ID_my_site']))
 { 
    $username = $_COOKIE['ID_my_site']; 
    $pass = $_COOKIE['Key_my_site'];
    $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
    while($info = mysql_fetch_array( $check ))  
    {
        if ($pass != $info['password']) 
        {
        }
        else
        {
            header("Location: members.php");
        }
    }
 }

 if (isset($_POST['submit'])) { // if form has been submitted
    if(!$_POST['username'] || !$_POST['pass']) {
        die('You did not fill in a required field.');
    }
    if (!get_magic_quotes_gpc()) {
        $_POST['email'] = addslashes($_POST['email']);
    }
    $check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error());
    $check2 = mysql_num_rows($check);
    if ($check2 == 0) {
        die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>');
    }

    while($info = mysql_fetch_array( $check ))  
    {
        $_POST['pass'] = stripslashes($_POST['pass']);
        $info['password'] = stripslashes($info['password']);
        $_POST['pass'] = md5($_POST['pass']);
        if ($_POST['pass'] != $info['password']) {
            die('Incorrect password, please try again.');
        }
        else 
        { 
            $_POST['username'] = stripslashes($_POST['username']); 
            $hour = time() + 3600; 
            setcookie(ID_my_site, $_POST['username'], $hour); 
            setcookie(Key_my_site, $_POST['pass'], $hour);   
            //then redirect them to the members area 
            header("Location: members.php"); 
        } 
    } 
} 
else 
{    
?> 
 <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
 <table border="0">
 <tr><td colspan=2><h1>Login</h1></td></tr>
 <tr><td>Username:</td><td> 
 <input type="text" name="username" maxlength="40"> 
 </td></tr> 
 <tr><td>Password:</td><td> 
 <input type="password" name="pass" maxlength="50"> 
 </td></tr> 
 <tr><td colspan="2" align="right"> 
 <input type="submit" name="submit" value="Login"> 
 </td></tr> 
 </table> 
 </form> 
 <?php 
 } 
 ?>

1 个答案:

答案 0 :(得分:0)

一个好的做法是die();脚本终止并向客户端发送Location标头,条件是没有任何内容已发送到客户端。

http://php.net/manual/en/function.header.php

设置标题时,最好始终使用输出缓冲。

ob_start();

http://php.net/manual/en/function.ob-start.php

while($info = mysql_fetch_array( $check ))  
{
    if ($pass != $info['password']) 
    {
    }
    else
    {
        header("Location: members.php");
        die();
    }
}

确保代码之前或之后没有空格,最好排除最后?>,因为这会使PHP忽略尾随空格。

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。