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 и узнали, как использовать ее для хранения временных данных в виде флэш-сообщений и как использовать для хранения более постоянных данных, то есть данных для входа пользователя.



