登录后的预期 URL 重定向 + 默认重定向?

Posted

技术标签:

【中文标题】登录后的预期 URL 重定向 + 默认重定向?【英文标题】:Intended URL redirect + default redirect after login? 【发布时间】:2011-04-03 21:47:21 【问题描述】:

当用户尝试通过链接访问我们的网站(例如访问 www.website.com/privatepage)时,他们会被重定向到登录页面。一旦他们登录,我们希望将他们重定向到预期的 URL - 你如何做到这一点?

我们还有一个用例,用户从主页登录,或者直接进入没有指定 URL 的登录页面 - 在这种情况下,我们希望将他们重定向到默认页面。

谁能帮我解决这个问题?

【问题讨论】:

您可以更具体地说明您使用的是哪种技术。但基本的事情是在您将用户重定向到登录时发送页面的 URL。这样,您可以拥有最后一个 url,并在成功登录后重定向到它。阅读有关 request.referer 的更多信息。 是的,就像 Amit 说的,如果不知道您使用的方法,我们将无法提供太多帮助。我的回答只是一般性帮助。 【参考方案1】:

在您的登录页面中:

如果您访问 www.example.com/private_page

使用 CodeIgniter(在私人页面上)

// if user is not logged in...
$_SESSION['redirect'] = $this->uri->segment(1);
redirect('login');

登录页面

// successfully logged in..
if (isset($_SESSION['redirect'])) 
    redirect($_SESSION['redirect']);
 else 
    // redirect to default page

【讨论】:

【参考方案2】:

在以这种方式进行重定向时,拥有一个可接受的 url 白名单可能是个好主意 - 否则,攻击者可能会向某人发送类似 example.com/login?attacker.com/fake_examplecom 的链接,并且用户将被重定向到攻击者的站点,同时认为他们刚刚登录到您的站点。原始网址指向您的网站,因此看起来值得信赖。正如您可以想象的那样,可以用它来做很多令人讨厌的事情。

【讨论】:

【参考方案3】:

他们如何重定向到登录页面?无论您使用哪种方法,您都可以在登录页面 URL 的末尾附加一个 GET 变量,然后在登录页面上引用该变量。

所以,用户想要访问www.example.com/privatepage,但您需要他们先登录www.example.com/login。将它们重定向到www.example.com/login?targetpage=/privatepage,然后在登录页面的代码中,您可以访问targetpage 变量。

【讨论】:

【参考方案4】:

我通常在重定向到登录页面之前将页面存储在 php 会话中。登录后,查看是否设置了会话值,如果是则重定向回该页面。

【讨论】:

以上是关于登录后的预期 URL 重定向 + 默认重定向?的主要内容,如果未能解决你的问题,请参考以下文章

我需要撤消重定向插件完成的重定向 URL

微软身份提供者和 .net 核心的注销重定向 url (5) MVC

servlet如何重定向

WordPress对url做重定向处理

浏览器302重定向传递hash

Linux 第三天 重定负管道符环境变量