问题很简单。我有一个PHP网站,每当用户通过需要登录的链接进入时,我希望用户被重定向到登录页面,然后,在他完成登录后,我希望他被重定向到他试图访问的链接进入网站。
那就是......
答案 0 :(得分:1)
只需传递您想要返回的网址即可。以stackoverflow为例。这是我访问过的网址
Redirect user to previous link after login
我点击"登录"我被发送到了
如果他们想在我登录后发回给我,那么可以
$returnurl = make_everything_safe($_GET['returnurl']);
header("Location: $returnurl")
答案 1 :(得分:0)
执行此操作的一种简单方法是将当前页面网址存储在Cookie中,然后在用户登录时测试Cookie是否存在,如果存在,则重定向到此Cookie中的网址
// Set your cookie before redirecting to the login page
$current_page = 'http://' . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];
$_COOKIE['redirect_to'] = $current_page;
用户登录后
if(isset($_COOKIE['redirect_to']))
{
$url = $_COOKIE['redirect_to'];
unset($_COOKIE['redirect_to']);
header('location:' . $url);
}
答案 2 :(得分:0)
你得到的其他答案也会很好用,但这里有一个使用非常简单的PHP的更深入的答案。没有设置cookie或会话变量,我会考虑额外的步骤;你必须确保在下一页开始你的会议。例如。
我要做的是有一个脚本运行来捕获他们试图访问的页面。您必须将此放置在访问者可以登陆的每个页面上,然后确保传递此值。这是一个很好的例子:
// Function to get the full URL even on SSL connections
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL; // Here the full URL is returned
}
此代码来自Web Cheat Sheet,其中包含您可能需要使用的更多脚本。有些甚至比这个短。
接下来是继续传递此值。简单的urlencode返回值(所以它的安全)并执行此操作:
// This sends them to your login script and
// adds the page they were heading to in the url to access with $_GET[];
header ("Location: $yourLoginPageUrl?sendBackTo=$returnedPageUrl");
现在你可以做两件事。不安全的是不做任何事情,让他们登录并在登录脚本上简单地使用$ _GET ['sendBackTo']访问值;因为URL在提交表单时具有值,所以它应该仍然存在,因为它是reffering页面。不推荐。聪明的是在登录表单上使用隐藏的文本字段,只需回显URL,以便您知道它在那里。然后在成功登录后发送给它。
您仍然需要处理捕获日志记录而没有记录的URL才能返回。