![](/img/trans.png)
[英]how to redirect to login page then redirect back to the previous page in php
[英]How to redirect back to the previous page in PHP?
我有一个PHP站点,它有一个登录页面。 我还有一个order.php页面。 当用户未登录时,订单页面首先将用户重定向到登录页面。 我想当用户从订单页面重定向到登录页面然后成功登录时,用户应该重定向回订单页面。 当用户从其他页面进入登录页面然后成功登录时,用户应该重定向到index.php页面。 我该怎么做? 任何的想法?
order.php
<?php
if (!logged_in()){
header("Location: login.php?referrer=order");
}
?>
的login.php
<?php
if (login_successful()){
switch($_GET['referrer'])){
case 'order':
header("Location: order.php");
break;
case 'other':
header("Location: other.php");
break;
default:
header("Location: index.php");
}
}
?>
<form method="post" action="login.php">
//
// Form content
//
</form>
---替换为---
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
//
// Form content
//
</form>
只需在链接中使用网址即可。 order.php的网址是:
http://somesite.com/login.php?url=order.php
在您的登录页面中,您可以阅读$_GET["url"]
并决定是将用户重定向还是将其重定向到index.php。
当用户未登录时,订单页面首先将用户重定向到登录页面。
为什么要额外重定向?
为什么不立即显示登录表单,成功登录后只需重定向到同一页面?
这是auth.php页面的简短示例
<?
if (isset($_POST['auth_name'])) {
$name = mysql_real_escape_string($_POST['auth_name']);
$pass = MD5($_POST['auth_name'].$_POST['auth_pass']);
$query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'";
$res = mysql_query($query) or trigger_error(mysql_error().$query);
if ($row = mysql_fetch_assoc($res)) {
session_start();
$_SESSION['user_id'] = $row['id'];
}
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
}
if (isset($_GET['action']) AND $_GET['action']=="logout") {
session_start();
session_destroy();
header("Location: http://".$_SERVER['HTTP_HOST']."/");
exit;
}
if (isset($_REQUEST[session_name()])) session_start();
if (empty($_SESSION['user_id'])) {
return;
} else {
include 'top.php';
?>
<form method="POST">
<input type="text" name="auth_name"><br>
<input type="password" name="auth_pass"><br>
<input type="submit"><br>
</form>
<?
include 'bottom.php';
}
exit;
?>
现在您可以使用以下一行来保护任何页面
require "auth.php";
您可以设置跟踪返回页面的cookie或会话值。 成功登录后,检查是否有返回页面。 如果是,请转到该页面。 如果没有,请转到默认的欢迎页面。
在重定向到登录页面之前,将登录目标存储到会话中。
例:
order.php
页面检查用户是否已登录并在必要时调用login.php
。 在重定向到login.php页面之前,它将登录目标存储为$_SESSION['loginTarget'] = 'order.php'
; header('Location: '.$_SESSION['loginTarget'], true, 303); exit;
由于登录目标存储在会话中,您可以轻松地在登录页面上进行错误处理,甚至可以创建新的用户帐户而不是登录(无需将URL中的目标传递给每个页面)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.