登录后的预期 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 重定向 + 默认重定向?的主要内容,如果未能解决你的问题,请参考以下文章