2016-02-05 3 views
4

Мне нужно решить сомнение, я оставляю детали.PHP - используется __construct(), чтобы проверить, есть ли сеанс

У меня есть класс, который имеет несколько связанных запросов к базе данных с пользовательскими данными, для доступа к этим методам необходимо проверить, что пользователь вошел в систему, и я делаю это с использованием методов инициализации php «__construct()», укажите там если пользователь вошел в систему.

<?php 
class User() 
{ 
    public function __construct() { 

     if (!isset($_SESSION['user'])) { 
      $data = array(
       'response' => false, 
       'message' => 'You must login to access this page'. 
      ); 
      echo json_encode($data); 
     } 
    } 

    public function index() { 
     // The user can access if you are logged 
    } 

    public function edit_profile() { 
     // The user can not access if you have not logged 
    } 

    public function save_profile_data() { 
     // The user can not access if you have not logged 
    } 
} 
?> 

Мои вопросы:

  1. Используйте кнопки __construct() хороший выбор оптимального ресурсоемким?
  2. __construct() безопасен в использовании и не позволяет пользователю получать доступ к другим методам, которые не указали, существует ли закодированная переменная сеанса.

Т.е. если пользователь вызывает edit_profile() метода, и этот метод не имеет кода для проверки на сессию, но я указал в __construct(), пользователь может получить доступ к этому метод?

Надеюсь, вы можете мне помочь, я был бы очень признателен.

+1

Похоже, вы только начиная с PHP здесь. Хорошо, вероятно, лучший подход - объявить свойство private в классе, которое устанавливает флаг для разрешения на выполнение метода. Затем внутри каждого метода вы запрашиваете состояние этого флага, чтобы увидеть, разрешено ли вам выполнение или нет. – MarkSkayff

+0

'$ _SESSION' написано неправильно. –

+0

@MarkSkayff - Спасибо за ваш ответ, но если вы видите что-то немного техничное в вопросах удобства использования, потому что я хочу не генерировать много кода в других методах, поэтому мы указали в __construct() –

ответ

2

Я предлагаю вам создать свой собственный файл библиотеки в библиотеке папки Здесь файл класс

class Authenticate { 
    var $table; 
    public function __construct() 
    { 
     $this->ci =& get_instance(); 

    } 
    public function is_logged_in() 
    { 
     $sessionid = $this->ci->session->userdata('moderId'); 
     if($sessionid) 
     { 
     return isset($sessionid); 
     } 
     else if(!$sessionid) { 
     redirect(base_url() . 'moderator'); 
} 
    } 
} 

И в контроллере, используйте этот function.if вы поставите эту функцию в конструкторе контроллера , то Виль быть доступны для всех методов контроллер

class B2bcategory extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 

     $this->load->model('moderator/b2bcategory_model'); 

     $this->authenticate->is_logged_in(); 
    } 
} 
+0

Отлично @ Ангел, спасибо вам большое, это понятно, мы можем использовать строителя, чтобы проверить встречу, спасибо за вашу поддержку, что у вас счастливый день. –

+0

Большое вам спасибо за очень приятный комплимент для меня ... я очень рад помочь людям. Приятного вам дня – Angel

Смежные вопросы