2011-05-17 94 views
1

我相当新,刚开始使用Codeigniter,并且遇到了关于会话的一些混淆。Codeigniter会话从头文件查看文件中检查

我想要实现的就像在普通的php中一样,我想通过使用包含文件的头文件检查会话数据来检查用户是否登录。我不想在每个控制器中检查/写入检查代码,同时将数据传递给视图文件。

有人可以告诉我它是如何做到的吗?

Ex。我不想做下面的每个控制器:

//Controller: 
if($this->session->userdata('loggedin'){ 
$data['loggedin'] = $this->session->userdata('loggedin'); 
} 
//I dont want to check the above on every function in every controller 
$this->load->view('some_view_file', $data); 

//some_view_file 
if(isset($loggedin)){ 
echo "You are logged in!"; 
} 
else 
{ 
echo "Please log in!"; 
} 

相反,我想要的东西像下面这样:

//some view file 
if(isset($loggedin)) 
{ 
echo "your logged in"; 
} 
else 
{ 
echo "please log in"; 
} 

还有,我该如何使用PHP本身的会议,而不是CI会话。任何帮助都感激不尽。谢谢。

回答

7

首先,世界上没有理由你不能只是写这样的事情在你看来:

<? echo ($this->session->userdata('loggedin')) ? "Logged In": "Not Logged In"; ?> 

那么你的控制器不需要任何代码。

但是,如果检查更复杂或什么的话,那么你可以做几个地方。

1)在自定义控制器的构造函数:创建一个新的文件application/core/MY_Controller.php,并重写构造的东西,如:

class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     if($this->session->userdata("loggedin")) { 
      // do something 
     } 
    } 
} 

然后让所有的控制器扩展MY_Controller。

2)或在post_controller_constructor挂钩。 http://codeigniter.com/wiki/Native_session/

+0

非常感谢。我想我得到它的工作与MY_Controller – 2011-05-18 03:05:48

0

我认为使用您的控制器上的结构将是最明智的做法:http://codeigniter.com/user_guide/general/hooks.html

您可以使用本机的会话与此(如果你有一大堆的控制器已经是这是更加透明,而且可能更容易)。

我也推荐加密你的会话cookie。


class Blog extends CI_Controller { 

     public function __construct() 
     { 
      parent::__construct(); 
      //always check if session userdata value "logged_in" is not true 
      if(!$this->session->userdata("logged_in")) 
      { 
       redirect('login'); 
      } 

     } 
} 
+0

感谢您的回应..它像你在这里说的所有工作。 – 2011-05-18 10:45:16