7

用户成功登录后,我正在努力设置重定向。

登录页面应将用户重定向到他们成功登录后被拒绝访问的页面。

例如,如果用户在登录(无会话)之前单击“我的帐户”,那么他们将成功重定向到登录页面,但是一旦他们登录,我如何将他们发送回“我的帐户”页面?

我尝试过的方法包括$_SESSION['HTTP_REFERER].

任何帮助将非常感激。

4

5 回答 5

9

使用$_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;
于 2012-04-22T22:40:43.320 回答
1

试试这个:

<?php
  header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
于 2012-04-22T22:41:37.983 回答
1

让进行重定向的页面设置一个会话变量,即该页面的 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;
于 2012-04-22T22:45:49.017 回答
0
header("Location: " . $_SERVER["HTTP_REFERER"]);

会这样做,但请注意:

在发送自定义标头之前,您不能输出(echo、、等)任何内容。print_r

于 2012-04-22T22:43:36.383 回答
0

您应该记住变量中的上次访问页面$_SESSION["last_page"](不包括登录页面)。用户成功登录后,获取变量的值并将用户重定向到他以前的位置。

您不能使用引荐来源网址。例如,如果用户第一次尝试登录失败,则在第二次尝试中,他的推荐人将是登录页面。

另一种方法是使用 ajax 对用户进行身份验证,而无需单独的登录页面。如果登录成功,您可以简单地使用 javascript 刷新页面。

于 2012-04-22T22:47:49.487 回答