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:cookie存在,但函数没有使用isset找到它_Php_Codeigniter_Cookies_Isset - Fatal编程技术网

PHP:cookie存在,但函数没有使用isset找到它

PHP:cookie存在,但函数没有使用isset找到它,php,codeigniter,cookies,isset,Php,Codeigniter,Cookies,Isset,使用CodeIgniter,我通过使用isset函数检查cookie是否存在,并根据这一点重定向到其他控制器。现在我的问题是,我得到了一个重定向循环,因为check_logged_in函数认为cookie不存在 这是我的密码: 此函数驻留在登录帮助程序中 下一个函数驻留在主控制器中,并调用如上所述的check_logged_in函数 public function index() { $this->load->helper('url'); $this->load

使用CodeIgniter,我通过使用isset函数检查cookie是否存在,并根据这一点重定向到其他控制器。现在我的问题是,我得到了一个重定向循环,因为check_logged_in函数认为cookie不存在

这是我的密码:

此函数驻留在登录帮助程序中

下一个函数驻留在主控制器中,并调用如上所述的check_logged_in函数

public function index()
{
    $this->load->helper('url');
    $this->load->helper('login');
    $logged_in = check_logged_in();

    if($logged_in === TRUE)
    {
        $this->load->view('templates/header');
        $this->load->view('pages/home_view');
        $this->load->view('pages/advanced_search_view');
        $this->load->view('pages/contact_information_view');
        $this->load->view('templates/footer');
    }
}
下一个函数驻留在用户控制器中

public function login()
{
    if(isset($_COOKIE['uid']))
    { 
        redirect(home); 
    }
    else
    {
        -some unrelated code-
    }
当cookie确实存在并且我运行home/index函数或users/login函数时,我最终进入了一个重定向循环。当cookie不存在时,我会在我的登录页面结束,因此看起来用户/登录cookie检查工作正常,但主/索引功能不正常

我试过把

if(!isset($_COOKIE['uid']))  
{   
    redirect('users/login');     
}

直接在home/index函数中,但它给出了相同的问题。

将登录检查放在构造函数中。给它一个通用名称——让它做一些有用的事情,比如从cookie和/或数据库查找返回信息

function __construct() {
parent::__construct();
 // load the model
 $this->load->model( 'login_model' );

 // if logged in, return $this->user
 if(! $this->user = $this->login_model->verifyUser() ) 
 { redirect('users/login', 'refresh'); }

 } // construct
现在$this->user可用于您的方法,一直到视图

如果你需要一个管理员,可以做更多的比用户,以同样的方式

 $this->admin = $this->login_model->verifyAdmin() ;

然后您可以更改verifyAdmin中发生的事情,并且您的类不必更新

您是否尝试回显$\u COOKIE['uid']?它是空的吗?看起来那可能是一个好的开始。你如何设置饼干?Cookie的域,path?我在回显Cookie时得到它的值,在我的例子中是“1234”。我通过setcookie'uid',$uid;codeigniter已经有了cookie助手函数,设置cookie和获取cookie,为什么不使用这个函数呢。我不确定,但可能的codeigniter会在调用控制器之前清除全局阵列
 $this->admin = $this->login_model->verifyAdmin() ;