2012-04-07 4 views
1

Этот вопрос конкретно посвящен правильному внедрению безопасности сеанса в среде, основанной на функции/ООП/MVC.безопасность сеанса в ООП/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 

} 
?> 
+0

Похоже, что проверка безопасности сеанса только в верхней части страницы для ООП не работает. Я нахожу, что если я перейду на сайт www.mysite.com/Main_controller/function1/, он просто загрузит функцию1. – jeremy

ответ

4

Расширьте базовый контроллер как 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

+0

Обратите внимание, что MY_Controller.php не входит в папку приложения/библиотек, но в приложении/ядре – Bram

0

Существует родную session library in Codeigniter. Также несколько расширенных библиотек. если вы ищете сообщество CI, существует множество типов и примеров. Создайте форму автозагрузки библиотеки сеансов config/autoload.php и проверьте проверку сеанса внутри основного контроллера.

0

На мой взгляд, вышеупомянутые решения будут работать для простой проверки доступа. что произойдет, если вы хотите контролировать страницу на основе того, какой тип пользователя зарегистрирован и в других случаях. по моему опыту расширение базовых классов всегда является проблемой, а базовые классы должны использоваться для общих задач &. Я бы рекомендовал внедрить отдельный класс, который будет обрабатывать ваши требования к проверке, тогда вызовите эти классы, где это необходимо, например,

public function function1() 
{ 
    if(SessionManager::CheckRights("IsMember")) 
    { 
     //$this->load->model(my_model); 
     // run some code 
    } 
    else 
     ...... 
} 
Смежные вопросы