将用户重定向回登录后要查看的页面


Redirecting a user back to the page they where viewing after login

好吧,举一个用户正在访问的例子:

mysite.com/user/profile/demo, 

并且他们执行跟随所述用户的动作并转到:

mysite.com/user/follow/demo, 

他们必须登录,所以它将他们重定向到登录表单,他们尝试登录一次,但失败了,然后他们在几秒钟内成功登录,如果我使用:

history.go(-1) 

这将返回到登录页面,因为他们登录失败了一次。有什么办法解决这个问题?使用

?referrer=user/profile/demo then if that's set go back to that page?

我对想法持开放态度,所以如果你给我一些就好了。

mysite.com/user/follow/demo中,在重定向到登录页面之前,可以将当前url保存在会话中。然后,一旦他们成功登录,你就可以检查这个会话变量的存在并重定向到它

示例:

mysite.com/user/follow/demo

<?php
session_start();
if (not logged in) {
  $_SESSION['redirect_after_login'] = $_SERVER['REQUEST_URI'];
  header('Location: /login');
  exit;
}
...

mysite.com/login

<?php
session_start();
...
login code
...
if (user has logged in) {
  if (isset($_SESSION['redirect_after_login'])) {
    $url = $_SESSION['redirect_after_login'];
    unset($_SESSION['redirect_after_login']);
    header('Location: ' . $url);
    exit;
  }
}

注:未经测试的伪代码

我建议您将重定向到的位置存储在GET中,因为使用history.go自然会返回历史,而不会更新登录按钮等。

当用户登录后,设置header('Location: ' . $_GET["r"]);将用户重定向回。