1

使用 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/logincookie 检查似乎工作正常,但home/index功能却没有。


我试过把

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

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

4

1 回答 1

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->user 可用于您的方法,一直到视图。

如果您需要一个比用户做更多事情的“管理员”,以同样的方式

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

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

于 2012-12-11T19:15:01.053 回答