Як налаштувати сеанс CodeЗапальник з прикладом
⚡ Розумний підсумок
CodeУправління сеансами Igniter зберігає дані користувачів через HTTP-запити без урахування стану, дозволяючи програмі запам'ятовувати зареєстрованого користувача, елементи кошика або одноразові флеш-повідомлення. У цьому прикладі створюється флеш-повідомлення та імітований вхід за допомогою... CodeБібліотека сеансів Igniter.

CodeКерування сеансом Igniter
Якщо ви раніше розробляли настільні програми, то, ймовірно, знаєте, що можна визначити глобальну змінну, присвоїти їй значення та використовувати її протягом усього життєвого циклу програми. Відкриваючи та закриваючи більше однієї форми, кожен запит матиме доступ до глобальної змінної.
Іншими словами, стан програми зберігається. Тобто, якщо під час входу ви встановили назву компанії як глобальну змінну, то навіть після закриття форми входу цей стан назви компанії зберігається.
HTTP працює дещо інакше, ніж сценарій, який ми щойно описали. Він не має стану. Тобто, будь-які дії в одному запиті не зберігаються в наступному.
Щоб вирішити цю проблему, у нас є два (2) рішення в PHP. Ми можемо працювати або з файлами cookie, які є невеликими файлами, розміщеними на комп'ютері користувача, або з сесіями, які схожі на файли cookie, але зберігаються на сервері та мають більшу ємність, ніж файли cookie.
Коли використовувати сесії?
Сесії зазвичай корисні, коли ви хочете знати про дії користувача на кожній сторінці. Наприклад, припустимо, що у вас є захищена область на веб-сайті. Користувачам не потрібно входити в систему на кожній сторінці. Ви можете дозволити користувачеві увійти один раз і зберегти його дані в змінній сесії, а потім повторно використовувати ті ж дані для подальших запитів. Інші випадки використання включають роботу з магазином.ping система, і користувач має додавати товари до магазинуping візок.
В якості альтернативи, CodeIgniter також використовує сесії, щоб зробити дані доступними лише один раз під час наступного запиту. Це корисно, коли ви відредагували та оновили запис бази даних і хочете повернути користувачеві певний зворотний зв'язок, коли його перенаправляють на іншу сторінку.
Надсилання миттєвих повідомлень на інші сторінки за допомогою CI Sessions
У цьому розділі ви дізнаєтесь про надсилання миттєвих повідомлень на інші сторінки за допомогою бібліотеки сеансів у CodeЗапалювач.
Створіть новий файл 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')); } }
ТУТ,
- class SessionController extends CI_Controller {…} визначає клас SessionController і розширює клас батьківського контролера.
- public function __construct() {…} визначає метод конструктора, який ініціалізує батьківський клас, і завантажує допоміжну URL-адресу та бібліотеку сеансу.
- public function index() {…} визначає метод індексу сеансу, який завантажує перегляд індексу сеансу.
- публічна функція flash_message(){…} визначає метод флеш-повідомлення, який встановлює флеш-дані, а потім перенаправляє на маршрут flash_index
Давайте тепер створимо представлення, яке відображатиме значення даних сеансу.
Створіть новий каталог sessions у application/views
Створіть новий файл 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 та відображає його у браузері.
Давайте тепер створимо маршрути для нашого методу сеансової флеш-пам'яті
Відкрийте application/config/routes.php
Додайте наступні рядки
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/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 у програмі/config
Додайте наступні маршрути
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ТУТ,
- $route['login'] = 'контролер сесії/вхід'; визначає маршрут, який відображає форму входу
- $route['authenticate'] = 'контролер сесії/автентифікація'; визначає маршрут, який імітує успішний вхід користувача, і встановлює дані для входу в сеанс.
- $route['settings'] = 'sessioncontroller/settings'; визначає захищену сторінку, яка має бути доступна лише користувачам, які ввійшли в систему
- $route['dashboard'] = 'сеансовий контролер/панель інструментів'; визначає захищену сторінку, яка має бути доступна лише користувачам, які ввійшли в систему.
- $route['logout'] = 'контролер сесії/вихід'; виходить із системи користувача шляхом знищення даних сеансу
Давайте тепер оновимо SessionController
Відкрийте application/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')); }
ТУТ,
- Публічна функція check_auth($page) {…} визначає метод, який перевіряє, чи користувач увійшов у систему, а потім дозволяє доступ до сторінки. Якщо користувач не увійшов у систему, його перенаправляють на сторінку входу з коротким повідомленням.
- public function login() {…} завантажує вікно входу, розташоване в каталозі сесій.
- публічна функція authenticate() {…} встановлює дані користувача сеансу для ключів logged_in та імені користувача. ПРИМІТКА. Ми не перевіряємо дані для входу в базу даних. Ми просто припускаємо, що подані деталі в порядку, і встановлюємо дані сеансу.
- public function dashboard() {…} завантажує сторінку панелі інструментів після виклику $this->check_auth('dashboard');, яка перевіряє, чи встановлено ключ сеансу logged_in.
- публічна функція settings() {…} завантажує сторінку налаштувань, яка також захищена
- публічна функція logout() {…} знищує дані сеансу та виводить користувача з системи. Метод також перенаправляє на сторінку входу
CodeПерегляди сеансу Igniter
Створіть наступні подання в програмі/поданнях/сесіях
- 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:0 </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(3);?></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:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></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="password" 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:0 </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
Ви будете перенаправлені на наступну сторінку
Натисніть на кнопку Вхід
Ви побачите такі результати
Після того, як ми ввійшли, ми тепер можемо побачити дані сеансу.




