重定向 - 替代“<meta http-equiv =”刷新“/>”?

时间:2010-08-03 12:23:04

标签: php mysql redirect

  

可能重复:
  Best redirect methods?

您好

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

重定向由<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>";
    }

非常感谢任何指示。

5 个答案:

答案 0 :(得分:6)

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

<meta http-equiv='refresh' content='2;index.php' />

您也可以使用标题刷新:

header("Refresh: 2;index.php");

或使用302重定向:

header("Location: /index.php");

或者在Javascript中进行。

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

答案 1 :(得分:4)

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

header("Location: index.php");
die();

这将向浏览器发送302响应,并使其打开另一页。

始终确保在发出`标题(“位置”)后不输出任何内容。您输出的任何内容仍会发送到浏览器!

实现这一目标的最简单方法通常是在标题(“位置:”)调用之后发出die()

答案 2 :(得分:3)

除了Pekka提到的header函数之外,您还可以使用javascript - 这是用于替换已弃用的元刷新的行为。

<script>top.location = 'index.php';</script>

只需用上面的内容替换元线。

您甚至可以按如下方式添加超时:

<script>setTimeout('top.location = \'index.php\'', 2000);</script>

以上将在重定向前等待2秒。

答案 3 :(得分:0)

header ("Location: index.php?success=1");
exit;

并在index.php中

if (!empty ($_GET['success'])) {
    echo "<h1>Success</h1>";
}

答案 4 :(得分:0)

首先:Meta只允许在HTML文档的head-section中使用,所以在h1之后将它放在体内并且p在体内是错误的并且在大多数浏览器中根本不起作用。

为了显示2秒的消息并在之后重定向你必须使用javascript,php无法为你做到这一点。

普通的javascript将使用setTimeout(以毫秒为单位的值)

setTimeout("location.href = 'index.php';",2000);

如果您想使用jQuery,可以使用delay() - 函数。