CodeIgniter身份验证概念问题

时间:2011-10-05 11:28:16

标签: php codeigniter authentication

我已经制作了CI身份验证控制器,允许用户登录该站点,登录后我将他重定向到我一直使用的以前访问过的URL:

$this->session->set_flashdata( 'return_url', current_url() );

不幸的是,这会导致问题。每当用户在浏览器中打开多个标签时,该变量被覆盖,并且在成功登录后,用户将被重定向到所有选项卡中的相同URL。

所以我的问题是:是否可以在MY_Controller中加载自定义控制器?MY_Controllerextends CI_Controller

的类

我尝试使用(在MY_Controller的构造函数内部),但它没有成功:

$CI =& get_instance();
$CI->router->set_class('authentication');
$CI->router->set_method('login');

编辑:我将很感激解决这个问题的任何其他想法。

3 个答案:

答案 0 :(得分:2)

解决方案不是在会话var中保存返回URL,而是在get / post参数中传递它(如果是get,正确编码,则为base64 ie。)。如果没有设置(有效)返回URL,则唯一的添加必须是标准的返回URL

---编辑 为什么我在讨论base64时,php只有这个功能; urlencode是你的朋友! http://nl3.php.net/urlencode

答案 1 :(得分:0)

要在控制器(例如MY_Controller)中加载自定义控制器,请使用php CURL进入身份验证控制器。

这可能会影响性能,因为这对每个请求都是一个昂贵的过程。

其他选项可以包括使用基类系统(请参阅http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY)或创建自动加载的库来处理身份验证。

答案 2 :(得分:0)

当您将未登录的用户重定向到登录页面时,请保留一个隐藏变量“redirect_to”,该变量将保存用户到达目的地的值。可以使用$ _SERVER ['HTTP_REFERRER']。然后在登录后,只需重定向到“redirect_to”的值。这样您就不必设置flashdata来重定向用户来自他们的网址。