2013-09-16 15 views
1

我是codeigniter框架的新手,对于如何设置进程来处理持久登录感到好奇。我正在将现有网站迁移到codeigniter,并且所有内容都已设置,只要创建cookie,保存和更新数据库中的令牌,即持久登录的平均最佳实践。如何在codeigniter中设置持久登录?

我不确定,因为我是codeigniter的新手(这可能会很简单,至少我希望如此)是如何处理用户系统上的cookie检查?在旧的应用程序中,我编写了一个名为“create_user_session()”的函数,我在该网站的每个页面顶部调用了该函数。此会话检查用户是否已登录,如果不是,则检查用户机器上是否存在cookie,如果是,则使用cookie中的令牌记录用户。

我的问题是在codeigniter中我应该设置这个过程?我假设有一种方法可以处理这种情况,而无需在我的控制器的每个人中都调用“create_user_session()”函数...至少这就是我所希望的。任何有关如何处理这种情况的见解,我们将不胜感激! :)

* 编辑 我计划在具有将被用来处理访问登录,出,注册用户,删除用户,用户所需要的机型“会话”控制器等

+0

你有看了看会议库? http://ellislab.com/codeigniter/user-guide/libraries/sessions。html – stormdrain

+0

我刚刚通过该文档阅读,如果我一旦你自动加载会话类codeigniter,然后知道执行会话处理任务的任何时候请求页面正确理解?如果是这种情况,那么我应该扩展会话类来利用我的永久登录功能? – commanderZiltoid

+0

查看答案。我建议扩展控制器而不是会话库。 – stormdrain

回答

2

假设你的“持久登录函数“只是自动登录有cookie/session的用户,CodeIgniter的会话库会为你处理。

如果您自动加载会话库,配置项会在每次加载页面时更新会话。

为了检查页面载入的会话,你可以把检查放在控制器的构造函数,控制器方法中,或者你可以创建一个扩展控制器来为你做全面的 - 这可能是最简单并且最有意义。

application/core/MY_Controller.php 

class MY_Controller extends CI_Controller{ 
    public function __construct() { 
     parent::__construct(); 
     if($this->session->userdata('session_id') == FALSE) { 
      redirect('/login'); 
     } 
    } 
} 

控制器:需要

身份验证:不要求

application/controllers/Whatever.php 

class Whatever extends MY_Controller { 

    // have to be logged in to see anything in here 

} 

AUTH:

application/controllers/Login.php 

class Login extends CI_Controller{ 

    // don't have to be logged in to see stuff here since 
    // we're extending CI_Controller and not MY_Controller 

} 
+0

__construct()方法应该包含“parent :: construct();”吗?我将你的答案与jonixj的答案进行比较,并且在扩展该类时看到他在调用CI_Controller方法的构造方法,然后在每个扩展它的控制器中调用扩展类的构造方法? – commanderZiltoid

+0

对,对不起。把它扔到那里,否则CI的其余部分将不可用:/除非你想为控制器创建你自己的构造函数,否则在控制器中不需要'function __construct(){}'。请参阅http://ellislab.com/codeigniter/user-guide/general/controllers.html#constructors – stormdrain

0

不要在每个控制器中检查cookie,而应该在核心目录中创建一个MY_Controller.php,并让应用程序中的所有控制器都从该控制器扩展。

这是非常方便的autenthication以及许多其他的东西,你不想在整个应用程序重复。

例如:

文件:核心/ MY_Controller.php

class MY_Controller extends CI__Controller { 
    function construct() 
    { 
     parent::construct(); 
     create_user_session(); 
    } 
} 

然后让所有的控制器从MY_Controller而非是CI_Controller延长:

class Users extends MY_Controller { 
    function construct() 
    { 
     parent::construct(); 
     [...] 
    } 

    [...] 
}