CodeIgniter Session Management
Если вы разрабатывали настольные приложения до этого, вы, вероятно, знаете, что вы можете определить глобальную переменную, присвоить ей значение и использовать ее на протяжении всего жизненного цикла, когда приложение открывает и закрывает более одного (1), и каждый запрос будет иметь доступ к глобальная переменная.
Другими словами, состояние приложения сохраняется. То есть, если при входе в систему вы устанавливаете имя компании в глобальную переменную, то даже после закрытия формы входа в систему состояние компании сохраняется.
HTTP работает немного иначе, чем в описанном выше сценарии. Это без гражданства. То есть то, что вы делаете в одном запросе, не сохраняется в следующем запросе. T
o обойти эту проблему. У нас есть два (2) решения в PHP. Мы можем либо работать с файлами cookie, которые представляют собой небольшие файлы, размещенные на компьютере пользователя, либо работать с сеансами, которые похожи на файлы cookie, но вместо этого хранятся на сервере и имеют большую емкость, чем файлы cookie.
В этом уроке вы узнаете
- CodeIgniter Session Management
- Когда использовать сессии
- Отправка Flash-сообщений на другие страницы с помощью сеансов CI
- Хранение пользовательских данных в сеансах CI
Когда использовать сеансы?
Сессии обычно полезны, когда вы хотите узнать действия пользователя от страницы к странице. Например, допустим, у вас есть защищенная область на веб-сайте. Пользователям не нужно входить на каждой странице. Вы можете позволить пользователю войти в систему один раз и сохранить его данные в переменной сеанса, а затем повторно использовать те же данные для дальнейших запросов. Другие варианты использования включают работу с системой покупок, и пользователь должен добавлять товары в корзину.
В качестве альтернативы CodeIgniter также использует сеансы, чтобы сделать данные доступными только один раз при следующем запросе. Это полезно, если у вас есть возможность отредактировать и обновить запись в базе данных, и вы хотите вернуть некоторую обратную связь пользователю, когда он будет перенаправлен на другую страницу.
Отправка Flash-сообщений на другие страницы с помощью сеансов 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 extends CI_Controller {…} определяет класс SessionController и расширяет класс родительского контроллера.
- public function __construct () {…} определяет метод конструктора, который инициализирует родительский класс, и загружает хелпер url и библиотеку сессий.
- public function index () {…} определяет метод индекса сеанса, который загружает представление индекса сеанса.
- public function flash_message () {…} определяет метод флеш-сообщения, который устанавливает флеш-данные, а затем перенаправляет на маршрут flash_index
Давайте теперь создадим представление, которое будет отображать значение данных сеанса.
Создать новый сеанс каталога в приложении / views
Создайте новый файл index.php в приложении / views / session
Добавьте следующий код
<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>
ВОТ,
- <? = $ this-> session-> userdata (‘msg’);?> получает значение данных сеанса с ключом msg и отображает его в браузере.
Давайте теперь создадим маршруты для нашего метода flash сессии
Откройте приложение / config / rout.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: // локальный: 3000 / flash_message
Вы будете перенаправлены на следующий URL, и вы получите следующие результаты
HTTP: // локальный: 3000 / flash_index
Нажмите на кнопку обновления вашего веб-браузера или нажмите F5
Теперь вы получите следующие результаты
Хранение пользовательских данных в сеансах CI
Давайте теперь посмотрим на немного более сложный пример. Чтобы упростить процесс, мы будем симулировать аутентификацию пользователя, а не выполнять фактическую проверку записи пользователя в базе данных и введенного пароля.
Начнем с маршрутов
Откройте rout.php, расположенный в приложении / 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’] = ‘sessioncontroller / settings’; определяет защищенную страницу, которая должна быть доступна только зарегистрированным пользователям
- $ route [‘dashboard’] = ‘sessioncontroller / dashboard’; определяет защищенную страницу, которая должна быть доступна только зарегистрированным пользователям.
- $ route [‘logout’] = ‘sessioncontroller / logout’; выходит из системы, удаляя данные сеанса
Давайте теперь обновим SessionController
Откройте приложение / controllers / 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 () {…} загружает представление входа в систему, расположенное в каталоге сессий.
- публичная функция authenticate () {…} устанавливает пользовательские данные сеанса для ключей logged_in и username. ПРИМЕЧАНИЕ. Мы не проверяем какие-либо данные для входа в базу данных. Мы просто предполагаем, что представленные данные в порядке и устанавливаем данные сеанса.
- public function dashboard () {…} загружает страницу панели мониторинга после вызова $ this-> check_auth (‘dashboard’); который проверяет, что установлен ключ сеанса logged_in.
- public function settings () {…} загружает страницу настроек, которая также защищена
- public function logout () {…} уничтожает данные сеанса и выходит из системы пользователя. Метод также перенаправляет на страницу входа
CodeIgniter Session Views
Создайте следующие представления в приложении / представления / сеансы
- dashboard.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>
ВОТ,
- <? = $ this-> 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: // локальный: 3000 / панель
вы будете перенаправлены на следующую страницу
Нажмите на кнопку входа
Вы увидите следующие результаты
После того, как мы вошли в систему, мы теперь можем видеть данные сеанса.
Резюме
В этом руководстве вы изучили основы библиотеки сеансов CodeIgniter и узнали, как использовать ее для хранения временных данных в виде флэш-сообщений и как использовать для хранения более постоянных данных, то есть данных для входа пользователя.