【问题标题】:Codeigniter Sessions Checking from a header view file从头视图文件检查 Codeigniter 会话
【发布时间】:2011-05-17 04:12:30
【问题描述】:

我是新手,刚开始使用 Codeigniter,在会话方面遇到了一些困惑。

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

谁能告诉我怎么做?

例如。我不想在每个控制器中都执行以下操作:

//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 会话。任何帮助都感激不尽。谢谢。

【问题讨论】:

    标签: session codeigniter


    【解决方案1】:

    首先,你没有理由不能在你的视图中写这样的东西:

    <? 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/user_guide/general/hooks.html(这更透明,如果您已经拥有大量控制器,可能会更容易)

    您可以使用本机会话: http://codeigniter.com/wiki/Native_session/

    【讨论】:

    • 非常感谢。我想我可以使用 MY_Controller
    【解决方案2】:

    我认为在控制器上使用构造将是最聪明的方法。

    我还建议加密您的会话 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');
                }
    
           }
    }
    

    【讨论】:

    • 感谢您的回复.. 就像你们在这里所说的一样。
    猜你喜欢
    • 2010-12-16
    • 2011-07-23
    • 1970-01-01
    • 2013-06-16
    • 2012-10-03
    • 2013-04-03
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多