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() 上被重置