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

时间:2012-12-11 12:55:12

标签: php codeigniter cookies isset

使用CodeIgniter我正在使用isset()函数检查cookie是否存在,并根据我重定向到另一个控制器。现在我的问题是我得到一个重定向循环,因为check_logged_in函数认为cookie不存在。

这是我的代码:

此功能位于login_helper

function check_logged_in()  
{  
    if(!isset($_COOKIE['uid']))  
    {   
        redirect('users/login');  
        return FALSE;   
    }
    else
    { 
         return TRUE;
}

下一个函数驻留在home控制器中,并调用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');
    }
}

下一个函数驻留在users控制器

public function login()
{
    if(isset($_COOKIE['uid']))
    { 
        redirect(home); 
    }
    else
    {
        -some unrelated code-
    }

当cookie确实存在并运行home/index函数或users/login函数时,我最终会进入重定向循环。当cookie不存在时,我最终会登录到我的登录页面,因此users/login cookie检查似乎正常,但home/index功能没有。


我试过把

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

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

1 个答案:

答案 0 :(得分:0)

将登录检查放入构造函数中。给它一个通用名称 - 让它做一些有用的事情,比如来自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->用户可用于您的方法,一直到视图。

如果你需要一个“admin”,它可以以同样的方式为用户做更多的事情

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

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