Codeigniter: лучшая практика для просмотра сеанса доступа

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

Является ли хорошей практикой доступ к переменным сеанса в представлении?

то есть.

// in the view <?php if ($this->session->userdata('is_logged_in') : ?> // stuff <?php endif; ?> 

Solutions Collecting From Web of "Codeigniter: лучшая практика для просмотра сеанса доступа"

Прямой ответ на ваш реальный вопрос просто: Да, нормально просматривать переменные сеанса внутри представления. Поскольку сеанс или регулярный, они являются именно этим, переменной. Место для хранения информации.

Я делаю это довольно часто с использованием $this->session->flashdata для отображения сообщений в определенной области представления внутри заголовка.

Причина, по которой я говорю это, состоит в том, что другие, похоже, пропустят ваш фактический вопрос, чтобы понять, почему вы задали вопрос: «Где лучше всего проверять auth?» для которого ответ Кадмуса главен на том, как я справляюсь с этим, но опять же, не думайте, что вы не должны получать доступ к «данным» сеанса из представления, но проверка подлинности должна выполняться на уровне Контроллера точно ,

Если вы не хотите вставлять эту «логику» в представление (хорошая вещь IMO), вам нужно, но в контроллере. Таким образом, сам вид станет более чистым:

 <?php if($logged_in): ?> do stuff <?php else: ?> do different <?php endif; ?> 

с $ logged_in, исходящим из представления, которое делает всю работу сессии. Вы можете либо написать свой собственный контроллер, который простирается от контроллера CI, так что классы расширяют ваш контроллер или абстрагируют его до отдельного класса Session, который имеет некоторые статические методы. Я думаю, что расширение CI-контроллера с помощью вашей собственной логики, по-видимому, является самым чистым способом, если вы выполняете большую обработку сеансов.

если вы используете такие переменные, вы можете использовать помощника. И вы можете получить доступ к нему, как:

 <?php if (is_logged_in()) : ?> <!--your html code --> <?php else ?> <!--more html code --> <?php endif;?> 

то в вашем помощнике, который называется access_helper, например, у вас есть:

 <?php function is_logged_in() { return $this->session->user_data('is_logged_in'); } ?> 

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

то я автоматически получаю проверку сеанса, что страница, которую я загружаю с этого контроллера, получает автоматическое получение обложки сеанса.

  public function __construct() { parent::__construct(); if (!$this->session->userdata('user_data')) { return redirect('login'); } else { redirect('dashboard'); } $this->load->model('customer_model'); } 

и для успешного или неудачного сообщения для представления я использую данные флэш-памяти.

 private function _falshAndRedirect($successful, $successMessage, $failureMessage) { if ($successful) { $this->session->set_flashdata('feedback', $successMessage); $this->session->set_flashdata('feedback_class', 'alert-success'); } else { $this->session->set_flashdata('feedback', $failureMessage); $this->session->set_flashdata('feedback_class', 'alert-danger'); } return redirect('customer/view_customer'); } 

здесь я использую частную функцию, чтобы получить сообщение к представлению.

то вы создаете функции, и функции автоматически активируют «обложку сеанса».

Надеюсь, это поможет.

Невозможно получить доступ к переменной сеанса из помощника. Самый простой способ – получить доступ к переменной сеанса из представления.

 <?php if ($this->session->user_data('is_loggen_in'): ?> <!-- HTML stuff --> <?php endif; ?> 

На мой взгляд, я не думаю, что это влияет на философию шаблона MVC, потому что сессия является глобальной информацией.