我有一个PHP站点,它有一个登录页面。 我还有一个order.php页面。当用户未登录时,订单页面首先将用户重定向到登录页面。 我想当用户从订单页面重定向到登录页面然后成功登录时,用户应该重定向回订单页面。 当用户从其他页面进入登录页面然后成功登录时,用户应该重定向到index.php页面。 我该怎么做?有什么想法吗?
答案 0 :(得分:3)
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>
答案 1 :(得分:1)
只需在链接中使用网址即可。 order.php的网址是:
http://somesite.com/login.php?url=order.php
在您的登录页面中,您可以阅读$_GET["url"]
并决定是将用户重定向还是将其重定向到index.php。
答案 2 :(得分:1)
当用户未登录时,订单页面会首先将用户重定向到登录页面。
为什么需要额外重定向?
为什么不立即显示登录表单,成功登录后只需重定向到同一页面?
这是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";
答案 3 :(得分:0)
您可以设置跟踪返回页面的Cookie或会话值。成功登录后,检查是否有返回页面。如果是,请转到该页面。如果没有,请转到默认的欢迎页面。
答案 4 :(得分:0)
在重定向到登录页面之前,将登录目标存储到会话中。
示例:
order.php
页面检查用户是否已登录并在必要时调用login.php
。在重定向到login.php页面之前,它将登录目标存储为自己$_SESSION['loginTarget'] = 'order.php'
; header('Location: '.$_SESSION['loginTarget'], true, 303); exit;
由于登录目标存储在会话中,您可以轻松地在登录页面上进行错误处理,甚至可以创建新的用户帐户而不是登录(无需将URL中的目标传递给每个页面)。