登录后将用户重定向到上一个链接

时间:2014-08-16 18:25:22

标签: php

问题很简单。我有一个PHP网站,每当用户通过需要登录的链接进入时,我希望用户被重定向到登录页面,然后,在他完成登录后,我希望他被重定向到他试图访问的链接进入网站。

那就是......

3 个答案:

答案 0 :(得分:1)

只需传递您想要返回的网址即可。以stackoverflow为例。这是我访问过的网址

Redirect user to previous link after login

我点击"登录"我被发送到了

https://stackoverflow.com/users/login?returnurl=http%3a%2f%2fstackoverflow.com%2fquestions%2f25342617%2fredirect-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才能返回。