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

时间:2010-08-25 18:44:03

标签: php javascript jquery codeigniter redirect

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

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

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:6)

在您的登录页面中:

如果您访问 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
}

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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