用户成功登录后,我正在努力设置重定向。
登录页面应将用户重定向到他们成功登录后被拒绝访问的页面。
例如,如果用户在登录(无会话)之前单击“我的帐户”,那么他们将成功重定向到登录页面,但是一旦他们登录,我如何将他们发送回“我的帐户”页面?
我尝试过的方法包括$_SESSION['HTTP_REFERER]
.
任何帮助将非常感激。
使用$_SERVER['HTTP_REFERER']
是危险的,因为如果用户在尝试登录时收到错误(例如密码错误),引荐来源将是同一个登录页面。在将用户重定向到登录页面之前,您应该将返回 URL 存储在会话变量中,然后在他们成功登录后,将它们重定向到存储的返回 URL。
例如,假设你需要保护page.php
,你可以在文件的开头有这样的东西:
if (empty($_SESSION['user'])) {
$_SESSION['backURL'] = $_SERVER['REQUEST_URI'];
header('Location: login.php');
exit;
}
然后,在用户成功登录后,您可以填充$_SESSION['user']
变量,然后重定向到您存储的 URL,然后将他发送到登录页面(或者如果碰巧您没有存储任何返回 URL,则重定向到站点的根目录无论出于何种原因):
$backURL = empty($_SESSION['backURL']) ? '/' : $_SESSION['backURL'];
unset($_SESSION['backURL']);
header('Location: ' . $backURL);
exit;
试试这个:
<?php
header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
让进行重定向的页面设置一个会话变量,即该页面的 URL:
session_start();
if (!$logged_id)
{
$_SESSION['redirect_url'] = $_SERVER['PHP_SELF'];
header('Location: login.php');
exit;
}
然后在成功登录后将它们重定向到该 URL:
session_start();
/* Login code goes here */
$redirect_url = (isset($_SESSION['redirect_url'])) ? $_SESSION['redirect_url'] : '/';
unset($_SESSION['redirect_url']);
header("Location: $redirect_url", true. 303);
exit;
header("Location: " . $_SERVER["HTTP_REFERER"]);
会这样做,但请注意:
在发送自定义标头之前,您不能输出(echo
、、等)任何内容。print_r
您应该记住变量中的上次访问页面$_SESSION["last_page"]
(不包括登录页面)。用户成功登录后,获取变量的值并将用户重定向到他以前的位置。
您不能使用引荐来源网址。例如,如果用户第一次尝试登录失败,则在第二次尝试中,他的推荐人将是登录页面。
另一种方法是使用 ajax 对用户进行身份验证,而无需单独的登录页面。如果登录成功,您可以简单地使用 javascript 刷新页面。