登录时页面重定向

时间:2014-03-21 02:42:27

标签: php

以下脚本可以正常工作,它允许用户登录。

登录后,这行代码要求他们点击链接转到members.php页面。

die("You are now logged in. Please <a href='members.php'>" ."click here</a> to continue.<br /><br />");

有没有办法可以让我们在登录后让页面自动重定向到members.php?

<?php // login.php
include_once 'header.php';
echo "<div class='main'><h3>Please enter your details to log in</h3>";
$error = $user = $pass = "";

if (isset($_POST['user']))
{
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);
    $pass_hash = md5($pass);

    if ($user == "" || $pass == "")
    {
        $error = "Not all fields were entered<br />";
    }
    else
    {
        $query = "SELECT user,pass FROM members
            WHERE user='$user' AND pass='$pass_hash'";

        if (mysql_num_rows(queryMysql($query)) == 0)
        {
            $error = "<span class='error'>Username/Password
                      invalid</span><br /><br />";
        }
        else
        {
            $_SESSION['user'] = $user;
            $_SESSION['pass'] = $pass;
            die("You are now logged in. Please <a href='members.php'>" . "click here</a> to continue.<br /><br />");
        }
    }
}

echo <<<_END
<form method='post' action='login.php'>$error
<span class='fieldname'>Username</span><input type='text'
    maxlength='16' name='user' value='$user' /><br />
<span class='fieldname'>Password</span><input type='password'
    maxlength='16' name='pass' value='$pass' />
_END;
?>

<br />
<span class='fieldname'>&nbsp;</span>
<input type='submit' value='Login' />
</form><br /></div></body></html>

3 个答案:

答案 0 :(得分:2)

是的,有:

header('Location: members.php');
exit;

请记住包含exit,以便即使在处理标题时出现问题,代码也会停止运行。

另请注意,这需要在任何输出完成之前完成。

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

<?php
if(isset($_POST['user'])){
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);
    $pass_hash = md5($pass);

    if ($user == "" || $pass == ""){
        $error = "Not all fields were entered<br />";
    }else{
        $query = "SELECT user,pass FROM members WHERE user='$user' AND pass='$pass_hash'";
        if (mysql_num_rows(queryMysql($query)) == 0){
            $error = "<span class='error'>Username/Password  invalid</span><br /><br />";
        }else{
            $_SESSION['user'] = $user;
            $_SESSION['pass'] = $pass;
            header('Location: members.php');
            exit;
        }
    }
}

include_once 'header.php'; //Any output must be after your header code
echo <<<_END
<form method='post' action='login.php'>$error
<span class='fieldname'>Username</span><input type='text' maxlength='16' name='user' value='$user' /><br />
<span class='fieldname'>Password</span><input type='password' maxlength='16' name='pass' value='$pass' />
_END;
?>

<br />
<span class='fieldname'>&nbsp;</span>
<input type='submit' value='Login' />
</form><br /></div></body></html>

BTW - 除了上面提到的代码之外,我还没有检查过你的任何代码

答案 1 :(得分:0)

在你有die()行的位置,你可以这样做

ob_clean();
header('Location: http://www.example.com');
exit;

答案 2 :(得分:0)

如果标题给您带来困难,您可以使用此备用( meta )方法:

您目前有die("You are now logged in...做的事情:

echo "You are not logged in. You will be redirected in 5 seconds...";
echo "<meta http-equiv=Refresh content=5;url=http://www.yoursite.com/members.php>";

旁注:将5中的content=5替换为您希望进行重定向的秒数。使用0会立即重定向。

这不是最好的方法,但它可以在很多情况下使用。

另一种方法是在您的开放<?php标记下添加ob_start();,该标记有时可用。

示例:

<?php
ob_start();
// login.php
include_once 'header.php';
echo "<div class='main'><h3>Please enter your details to log in</h3>";
$error = $user = $pass = "";

...

$_SESSION['user'] = $user;
            $_SESSION['pass'] = $pass;
            // die("You are now logged in....

    // keep the http:// and replace with your website address
    header('Location: http://www.example.com/members.php');
    exit;

...
相关问题