【问题标题】:Check session using hooks in codeigniter?在codeigniter中使用钩子检查会话?
【发布时间】:2016-02-23 13:37:31
【问题描述】:

我必须检查每个控制器中的会话。如果用户已注销,则重定向到登录页面。我如何使用 codeigniter 中的钩子来做到这一点,这样我就不必在每个控制器中编写会话条件。帮帮我。

我在application/hooks/Authenticate.php 中有以下代码

function __construct()
{
    $this->CI =& get_instance();
}


function loginCheck()
{
    if($this->session->userdata('role_id')=='' && $this->session->userdata('user_id')=='' && $this->session->userdata('client_id')==''){ 
    redirect('login');
    }

}

application/config/hooks.php中的以下代码

$hook['pre_controller'][] = array(
'class' => 'Authenticate',
'function' => 'loginCheck',
'filename' => 'authenticate.php',
'filepath' => 'hooks/authenticate',
'params' => array()
);

当我注销并按下浏览器后退按钮时,它再次将我带到登录部分。似乎会话没有正确销毁。

【问题讨论】:

  • 你目前有什么代码?你试过什么?什么不工作?

标签: codeigniter


【解决方案1】:
  1. 在 application/core/ 中创建 AppController 扩展 CI_Controller
  2. 在配置中设置“my_class_prefix”(?) = 'App'
  3. 从 AppController 扩展所有应用程序控制器(对公共访问关闭)
  4. 在 AppController chech 会话的 __construct() 中

【讨论】:

  • 感谢您的帮助。但是,我不想对核心文件进行任何修改。我们不能用钩子来做吗?
  • "当我注销并按下浏览器返回按钮时,它再次将我带到登录部分。"按 F5?
  • 此时唯一的问题是如果我们升级框架版本会怎样?核心文件夹内控制器中的这种自定义是否有效?
  • 您只需要从旧版本复制控制器、模型和视图文件夹。 CI 3.0 中的配置文件发生了变化。将旧配置数据集成到新配置文件中。
【解决方案2】:

您可以通过为此创建一个函数来检查... 检查是否没有设置会话,然后才在登录时重定向...否则在主页/仪表板上重定向 usr...

function check_user_login()
{
    if(! $this->session->userdata('logged_in'))
    {
        redirect('login');
    }

    if($this->session->userdata('user_active') == false)
    {
        redirect('your page name');
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多