1

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

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

我的问题是我应该在 codeigniter 的哪个位置设置这个过程?我假设有一种方法可以处理这种情况,而不必在我的每个控制器中调用“create_user_session()”函数……至少这是我所希望的。非常感谢任何有关如何处理这种情况的见解!:)

*编辑 我计划有一个“会话”控制器,用于处理访问用户登录、注销、注册用户、删除用户等所需的模型。

4

2 回答 2

2

假设您的“持久登录功能”只是自动登录具有 cookie/会话的用户,CodeIgniter 的会话库将为您处理这个问题。

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

为了检查页面加载时的会话,您可以将检查放入控制器构造函数中,在控制器方法中,或者您可以创建一个扩展控制器来为您全面执行此操作 - 这可能是最简单的并且使最有意义。

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

}   

不需要身份验证:

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

}
于 2013-09-16T15:29:26.527 回答
0

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

这对于身份验证以及您不想在整个应用程序中重复的许多其他内容非常方便。

例如:

文件:核心/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();
        [...]
    }

    [...]
} 
于 2013-09-16T15:24:31.363 回答