好吧,举一个用户正在访问的例子:
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"]);
将用户重定向回。