使用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
函数中,但它也给出了同样的问题。
答案 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()中发生的情况,并且您的类不必更新。