可能重复:
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>";
}
非常感谢任何指示。
答案 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)