Как установить сеанс в Codeigniter на примере
Управление сеансами CodeIgniter
Если вы до этого разрабатывали настольные приложения, вы, вероятно, знаете, что можно определить глобальную переменную, присвоить ей значение и использовать ее на протяжении всего жизненного цикла приложения, открывая и закрывая более одного (1), и каждый запрос будет иметь доступ к глобальная переменная.
Другими словами, состояние приложения сохраняется. То есть, если при входе в систему вы устанавливаете название компании в качестве глобальной переменной, то даже после закрытия формы входа в систему это состояние названия компании сохраняется.
HTTP работает немного иначе, чем описанный выше сценарий. Это безгражданство. То есть, скажем, все, что вы делаете в одном запросе, не будет продолжено в следующем запросе. Т
о обойти эту проблему. У нас есть два (2) решения на PHP. Мы можем либо работать с файлами cookie, которые представляют собой небольшие файлы, размещаемые на компьютере пользователя, либо работать с сеансами, которые похожи на файлы cookie, но вместо этого хранятся на сервере и имеют больший объем, чем файлы cookie.
Когда использовать сеансы?
Сеансы обычно полезны, когда вы хотите узнать действия пользователя на странице за страницей. Например, предположим, что у вас есть защищенная область на сайте. Пользователям не нужно входить в систему на каждой странице. Вы можете разрешить пользователю войти в систему один раз и сохранить его данные в переменной сеанса, а затем повторно использовать те же данные для дальнейших запросов. Другие варианты использования включают работу в системе покупок, когда пользователю приходится добавлять товары в корзину.
Альтернативно, CodeIgniter также использует сеансы, чтобы сделать данные доступными только один раз при следующем запросе. Это полезно, если вы можете редактировать и обновлять запись базы данных, и вы хотите вернуть пользователю некоторую обратную связь, когда он перенаправляется на другую страницу.
Отправка флэш-сообщений на другие страницы с помощью сеансов CI
В этом разделе вы узнаете об отправке флэш-сообщений на другие страницы с помощью библиотеки сеансов в CodeIgniter
Создайте новый файл SessionController в
application/controllers/SessionController.php
Добавьте следующий код
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
ВОТ,
- класс SessionController расширяет CI_Controller {…} определяет класс SessionController и расширяет класс родительского контроллера.
- public function __construct() {…} определяет метод конструктора, который инициализирует родительский класс и загружает вспомогательный URL-адрес и библиотеку сеансов.
- public function index() {…} определяет метод индекса сеанса, который загружает представление индекса сеанса.
- общедоступная функция flash_message(){…} определяет метод флэш-сообщения, который устанавливает флэш-данные, а затем перенаправляет их на маршрут flash_index
Давайте теперь создадим представление, которое будет отображать значение данных сеанса.
Создайте новый сеанс каталога в приложении/представлениях.
Создайте новый файл index.php в application/views/sessions.
Добавьте следующий код
<html> <head> <title>Code Igniter Flash Session</title> </head> <body> <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p> </body> </html>
ВОТ,
session->userdata('msg');?> извлекает значение данных сеанса с ключом msg и отображает его в браузере.
Давайте теперь создадим маршруты для нашего метода flash сеанса.
Откройте приложение/config/routes.php.
Добавьте следующие строки
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Давайте теперь запустим встроенный сервер для PHP и протестируйте наши флеш-сообщения
Откройте терминал
Запустите следующую команду
cd C:\Sites\ci-app php -S localhost:3000
ВОТ,
Приведенная выше команда переходит в каталог кода приложения и запускает встроенный сервер на порту 3000.
Примечание: путь к приложению должен совпадать с путем, по которому вы загрузили CodeIgniter, и вы можете использовать любой номер порта, свободный на вашем компьютере. Порт 3000 использовать не обязательно.
Загрузите следующий URL-адрес в свой веб-браузер: http://localhost:3000/flash_message
Вы будете перенаправлены на следующий URL-адрес и получите следующие результаты: http://localhost:3000/flash_index
Нажмите кнопку обновления в веб-браузере или нажмите F5.
Теперь вы получите следующие результаты
Хранение пользовательских данных в сеансах CI
Давайте теперь посмотрим на немного более продвинутый пример. Для простоты мы будем моделировать аутентификацию пользователя, а не выполнять фактическую реализацию проверки записи пользователя в базе данных и отправленного пароля.
Начнем с маршрутов
Откройте Routes.php, расположенный в файле application/config.
Добавьте следующие маршруты
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ВОТ,
- $route['login'] = 'sessioncontroller/login'; определяет маршрут, который отображает форму входа
- $route['authenticate'] = 'sessioncontroller/authenticate'; определяет маршрут, который имитирует успешный вход пользователя в систему, и устанавливает данные входа в сеанс.
- $route['settings'] = 'контроллер сеанса/настройки'; определяет защищенную страницу, которая должна быть доступна только вошедшим в систему пользователям
- $route['dashboard'] = 'sessioncontroller/dashboard'; определяет защищенную страницу, которая должна быть доступна только вошедшим в систему пользователям.
- $route['logout'] = 'контроллер сеанса/выход'; выводит пользователя из системы, уничтожая данные сеанса
Давайте теперь обновим SessionController.
Откройте приложение/контроллеры/SessionController.php.
Добавьте следующие методы
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
ВОТ,
- public function check_auth($page) {…} определяет метод, который проверяет, вошел ли пользователь в систему, а затем разрешает доступ к странице. Если пользователь не вошел в систему, он перенаправляется на страницу входа с помощью флэш-сообщения.
- public function login() {…} загружает представление входа в систему, расположенное в каталоге сеансов.
- публичная функция аутентификации() {…} устанавливает данные пользователя сеанса для ключей logged_in и имени пользователя. ПРИМЕЧАНИЕ. Мы не проверяем данные для входа в базу данных. Мы просто предполагаем, что предоставленные данные в порядке, и устанавливаем данные сеанса.
- public function Dashboard() {…} загружает страницу информационной панели после вызова $this->check_auth('dashboard'); который проверяет, что ключ сеанса logged_in установлен.
- public function settings() {…} загружает страницу настроек, которая также защищена
- public function logout() {…} уничтожает данные сеанса и завершает сеанс пользователя. Метод также перенаправляет на страницу входа.
Представления сеанса CodeIgniter
Создайте следующие представления в приложении/представлениях/сессиях.
- панель инструментов.php
- login.php
- settings.php
Добавьте следующий код в Dashboard.php
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata('username');?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
ВОТ,
session->userdata('username');?> отображает имя пользователя, которое мы установили в методе аутентификации.
Добавьте следующий код в login.php
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata('msg');?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="passport" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
ВОТ,
Форма входа отправляется для аутентификации маршрута.
Добавьте следующий код в settings.php
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
Вот и все, что касается наших взглядов. Давайте теперь проверим наше приложение.
В этом уроке мы используем встроенный веб-сервер PHP, но вы можете использовать любой веб-сервер, поддерживающий PHP.
Откройте терминал
Запустите следующую команду
cd C:\Sites\ci-app php -S localhost:3000
ВОТ,
Приведенная выше команда переходит в каталог кода приложения и запускает встроенный сервер на порту 3000.
Примечание: путь к приложению должен совпадать с путем, по которому вы загрузили CodeIgniter, и вы можете использовать любой номер порта, свободный на вашем компьютере. Порт 3000 использовать не обязательно.
Откройте следующий URL-адрес в своем веб-браузере: http://localhost:3000/dashboard
вы будете перенаправлены на следующую страницу
Нажмите на кнопку Войти
Вы увидите следующие результаты
После входа в систему мы теперь можем видеть данные сеанса.
Резюме
В этом руководстве вы изучили основы библиотеки сеансов CodeIgniter и узнали, как использовать ее для хранения временных данных в виде флэш-сообщений и как использовать для хранения более постоянных данных, то есть данных для входа пользователя.