重定向 - 替代"<meta http-equiv ='refresh'/>"?

Dav*_*ave 2 php mysql redirect

可能重复:
最佳重定向方法?

你好

我正在使用一些遗留代码,其中包含用于用户注册/登录的模块.有一个块查询数据库以查看用户是否已登录,然后重定向到登录页面.

重定向由处理,<meta http-equiv='refresh' content='=2;index.php' />但我已经知道这是折旧的,并不适用于所有浏览器.

是否有另一种方法可以在下面的代码中重新定位?

    $username = mysql_real_escape_string($_POST['username']);
    $password = md5(mysql_real_escape_string($_POST['password']));

    $checklogin = mysql_query("SELECT * FROM users WHERE username = '".$username."' AND password = '".$password."'");

    if(mysql_num_rows($checklogin) == 1)
    {
        $row = mysql_fetch_array($checklogin);
        $email = $row['email'];

        $_SESSION['username'] = $username;
        $_SESSION['email'] = $email;
        $_SESSION['LoggedIn'] = 1;

        echo "<h1>Success</h1>";
        echo "<p>We are now redirecting you</p>";
        echo "<meta http-equiv='refresh' content='=2;index.php' />";
    }
    else
    {
        echo "<h2>Error</h2>";
        echo "<p>Sorry, your account could not be found. Please <a href=\"index.php\">click here to try again</a>.</p>";
    }
Run Code Online (Sandbox Code Playgroud)

非常感谢任何指针.

jmz*_*jmz 7

不推荐使用META刷新.您的刷新标记有一个额外的=.它应该是

<meta http-equiv='refresh' content='2;index.php' />
Run Code Online (Sandbox Code Playgroud)

您也可以使用标题刷新:

header("Refresh: 2;index.php");
Run Code Online (Sandbox Code Playgroud)

或者使用302重定向:

header("Location: /index.php");
Run Code Online (Sandbox Code Playgroud)

或者在Javascript中完成.

最好的方法?在该<head>部分中使用META刷新标记.这样做的基本原理是IE在使用页面的缓存版本时不保存标题.


Pek*_*ica 5

您可以header()在将任何内容发送到服务器之前使用:

header("Location: index.php");
die();
Run Code Online (Sandbox Code Playgroud)

这将向浏览器发送302响应,并导致其打开其他页面。

始终确保在发出`header(“ Location”)之后不输出任何内容。您输出的任何内容仍将发送到浏览器!

最简单的方法通常是die()在header(“ Location:”)调用之后发出一个。