CodeIgniter:动态登录后重定向?

Posted

技术标签:

【中文标题】CodeIgniter:动态登录后重定向?【英文标题】:CodeIgniter: Dynamic post-login redirection? 【发布时间】:2011-01-08 23:27:29 【问题描述】:

我正在构建一个基本的 CodeIgniter 站点,需要先登录才能访问任何站点。

如果用户访问某个网站 url,如下所示:

http://www.mysite.com/project/detail/2049

并且他们当前已注销,我已将其设置为自动将他们踢回登录页面。

我的问题是,在他们登录后,将他们重定向到他们输入的原始 URL 的最佳方式是什么,而不是说,将他们重定向到网站主页?

我在想也许,在登录表单中动态创建 URL 作为隐藏表单元素,并在成功登录后重定向到那里......你们怎么看?这种类型的动态登录后重定向是否有更好/最佳实践?

【问题讨论】:

【参考方案1】:

当他们点击受限页面时,记录 uri 并使用

将其设置为会话数据

this->session->set_userdata('redirect', 'page/uri/here');

然后将它们重定向到登录/注册

他们登录后检查是否存在“重定向”

if($this->session->userdata('redirect'))

    redirect($this->session->userdata('redirect'));

如果没有,则将它们带到您登录后通常将它们带到的任何地方

【讨论】:

【参考方案2】:

当访问尝试被拦截时:

redirect('/public/login/r'.$this->uri->uri_string());

因此,在您的情况下,重定向后的 url 可能如下所示:

http://www.example.com/public/login/r/project/detail/2049

如果登录成功

$uri = $this->uri->uri_string();
$redirect = substr($uri, strpos($uri, '/r/')+2);
redirect($redirect);

将重定向到原始资源。

(不,+2 不应该是 +3)

【讨论】:

【参考方案3】:

您为什么不在登录时创建会话值,然后在每个需要保护的页面上验证它?

把它构建成一个库,这样你就可以调用如下:

$this->mylibrary->login($user);

$this->mylibrary->is_logged_in($user); 在每个页面的顶部,并自动将访问者重定向到您的主站点。

【讨论】:

我认为你误解了这个问题。【参考方案4】:

我正在使用 flashdata 进行重定向。

this->session->set_flashdata('redirect_url', 'page/uri/here');

他们登录后检查是否存在“redirect_url”

if($this->session->flashdata('redirect_url'))

    redirect(base_url().$this->session->flashdata('redirect_url')));

希望有帮助

【讨论】:

以上是关于CodeIgniter:动态登录后重定向?的主要内容,如果未能解决你的问题,请参考以下文章

在 CodeIgniter 4 中提交表单后重定向页面无法工作

SESSION 变量在 Codeigniter php 中的 redirect() 上被重置

Codeigniter:form_open 重定向到空白页面

angular 5 - 登录后重定向上一页

用户登录后重定向到要访问页面

登录后重定向到登录页面