OOP/MVC 中的会话安全性


session security in OOP/MVC

这个问题专门介绍如何在基于函数/OOP/MVC 的环境中正确实现会话安全性。

我熟悉程序文件中的会话安全性 - 如果我有一个程序编写的control_panel.php文件,我可以简单地在页面顶部检查会话安全性,或者在逻辑指示时首次加载它。

但是,我是OOP/MVC的新手,我的页面现在只是一堆功能!

希望我不需要检查每个函数中的会话安全性..?

请注意,我使用的是CodeIgniter2。

这是我的代码示例:

<?php
class Main_controller extends CI_Controller {
public function __construct() {
        parent::__construct(); 
}
public function index() {
   //$this->load->view(my_view);
   //run some code
}
public function function1() {
   //$this->load->model(my_model);
   // run some code
}
private function function2() {
   //$this->load->view(my_view2);
   //run some code
}
?>

在程序 php 页面中,它看起来像这样:

<?php
// check user login
if (isset($_SESSION["user"]) && !empty($_SESSION["user"])) {
// all of the code on the page
}
?>

将基本控制器扩展为MY_Controller - 并将检查放在那里。

class MY_Controller extends CI_Controller
{
    public function __construct() 
    {
        parent::__construct();
        if ( ! isset($_SESSION["user"]) OR (empty($_SESSION["user"]))
        {
            // User not logged in - so send them to the home page
            redirect ("/");
        }
    }
}

然后扩展每个控制器的MY_Controller,除非他们已登录,否则用户将无法访问其中任何一个

class Main_controller extends MY_Controller
{
    public function __construct() 
    {
        parent::__construct(); 
    }
    public function index()
    {
        //$this->load->view(my_view);
        //run some code
    }
    public function function1()
    {
        //$this->load->model(my_model);
        // run some code
    }
}

有关更多信息,请参见此处:http://codeigniter.com/user_guide/general/core_classes.html

Codeigniter 中有本机会话库。还有几个扩展库。如果你搜索CI社区,有很多类型和例子。使会话库自动加载表单config/autoload.php并检查主控制器内的会话验证。

在我看来,上述解决方案适用于简单的登录验证。 如果要根据登录的用户类型和其他情况来控制页面,会发生什么情况。 根据我的经验,扩展基类始终是一个挑战,基类应该用于泛型和跨领域问题。我建议实现一个单独的类来处理您的验证需求,然后在需要时调用这些类,例如

public function function1()
{
    if(SessionManager::CheckRights("IsMember"))
    {
        //$this->load->model(my_model);
        // run some code
    }
    else
        ......
 }