Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter钩子检查用户是否登录_Php_Codeigniter - Fatal编程技术网

Php codeigniter钩子检查用户是否登录

Php codeigniter钩子检查用户是否登录,php,codeigniter,Php,Codeigniter,我目前正在尝试添加到我的验证钩子(检查用户/公司是否处于活动状态),通过一些修补,我成功地使其正常工作 我现在正在尝试做我在每个类>函数(或_构造)中所做的事情,并对用户是否使用我的会话数据“loginuser”(设置为布尔值)登录进行基本检查 我正试图使用这个,但不断得到太多的重定向。这与我在_构造或每个公共函数中使用的代码相同,并且它在那里工作得非常完美(非对象的更改除外) 我不知道为什么它在名为“post\u controller\u constructor”的钩子中不起作用。 我可能忽略

我目前正在尝试添加到我的验证钩子(检查用户/公司是否处于活动状态),通过一些修补,我成功地使其正常工作

我现在正在尝试做我在每个类>函数(或_构造)中所做的事情,并对用户是否使用我的会话数据“loginuser”(设置为布尔值)登录进行基本检查

我正试图使用这个,但不断得到太多的重定向。这与我在_构造或每个公共函数中使用的代码相同,并且它在那里工作得非常完美(非对象的更改除外)

我不知道为什么它在名为“post\u controller\u constructor”的钩子中不起作用。 我可能忽略了一些非常简单的东西,但我已经在圈里转了好几个小时了,google/所以搜索者根本没用。这也是一件非常基本的事情


回答:对于任何在家玩的人来说:

    function logged_in() {

    $CI =& get_instance();

    if(!$CI->session->userdata('loginuser')) {
        if (uri_string() != 'account/login' && uri_string() != 'login' && uri_string() != 'account/register'){

            $CI->session->set_flashdata('flashError', 'Please login to continue');
            redirect('account/login');
        }
    }

}

你的代码正在做你想做的事情,但是有一点疏忽

在执行任何类型的重定向之前,需要检查当前路由是否为登录页面

我想,当您以前在控制器构造函数中进行检查时,您没有将其放入帐户控制器

If (user is not logged in) {
    If (Current route is not a login page) {
        Redirect user to login page
    }
}

我不知道你的意思,作为一个钩子,它独立于我重定向到的实际控制器?我已经在同一个控制器(不同的函数)的其他代码中使用了相同的重定向,它工作正常吗?我在登录控制器中检查用户是否已登录以防止显示登录屏幕,但正在检查的变量是否已取消设置?如果($this->form\u validation->run()==FALSE和$this->session->userdata('loginuser')==TRUE){redirect(site\u url());}我也有以下路由:$route['login']='account/login'$路由['account/login']='account/login';当您在post_controller_构造函数钩子中放入某些内容时,该代码将在创建任何控制器后执行。当有人进入一个页面时,这很好,他们需要登录,所以它会将他们重定向到登录页面。然后,钩子代码检查它们是否在创建帐户控制器后登录,并将它们重定向到登录页面。然后它会一次又一次地执行相同的操作,因此会出现“太多”重定向错误。在重定向用户之前,您需要检查当前路由是否为account/login。啊,我明白了,那么我应该在钩子中添加对该路由的检查,并将其排除在外吗?
If (user is not logged in) {
    If (Current route is not a login page) {
        Redirect user to login page
    }
}