Як налаштувати сесію в Codeigniter за допомогою прикладу
Управління сеансами CodeIgniter
Якщо ви раніше розробляли настільні програми, ви, напевно, знаєте, що можете визначити глобальну змінну, призначити їй значення та використовувати її протягом життєвого циклу програми, відкриваючи та закриваючи більше ніж одну (1), і кожен запит матиме доступ до глобальна змінна.
Іншими словами, стан програми зберігається. Тобто, якщо під час входу в систему ви встановили назву компанії як глобальну змінну, то навіть після того, як ви закриєте форму входу, стан назви компанії збережеться.
HTTP працює дещо інакше, ніж описаний вище сценарій. Це особа без громадянства. Тобто скажіть, що все, що ви робите в одному запиті, не зберігається в наступному запиті. Т
o обійти цю проблему. У нас є два (2) рішення на PHP. Ми можемо працювати з файлами cookie, які є невеликими файлами, що розміщуються на комп’ютері користувача, або працювати з сеансами, які схожі на файли cookie, але натомість зберігаються на сервері та мають більший обсяг, ніж файли cookie.
Коли використовувати сесії?
Сеанси зазвичай корисні, коли ви хочете знати дії користувача від сторінки до сторінки. Наприклад, скажімо, у вас є охоронна зона на веб-сайті. Користувачам не потрібно авторизуватися на кожній сторінці. Ви можете дозволити користувачеві ввійти один раз і зберегти його деталі у змінній сеансу, а потім повторно використовувати ті самі дані для подальших запитів. Інші випадки використання включають роботу в системі покупок, коли користувач повинен додати товари до кошика для покупок.
Крім того, CodeIgniter також використовує сеанси, щоб зробити дані доступними лише один раз під час наступного запиту. Це корисно, якщо ви можете редагувати та оновлювати запис бази даних, і ви хочете повернути деякий відгук користувачеві, коли він перенаправляється на іншу сторінку.
Надсилання миттєвих повідомлень на інші сторінки за допомогою CI Sessions
У цьому розділі ви дізнаєтесь про надсилання миттєвих повідомлень на інші сторінки за допомогою бібліотеки сеансів у 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')); } }
ТУТ,
- class SessionController extends 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 і відображає його у браузері.
Давайте тепер створимо маршрути для нашого флеш-методу сеансу
Відкрийте application/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 у програмі/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')); }
ТУТ,
- public function check_auth($page) {…} визначає метод, який перевіряє, чи зареєструвався користувач, а потім дозволяє доступ до сторінки. Якщо користувач не ввійшов у систему, він перенаправляється на сторінку входу з миттєвим повідомленням.
- публічна функція login() {…} завантажує вікно входу, розташоване в каталозі сеансів.
- публічна функція authenticate() {…} встановлює дані користувача сеансу для ключів logged_in та імені користувача. ПРИМІТКА. Ми не перевіряємо дані для входу в базу даних. Ми просто припускаємо, що подані деталі в порядку, і встановлюємо дані сеансу.
- публічна функція dashboard() {…} завантажує сторінку панелі інструментів після виклику $this->check_auth('dashboard'); який перевіряє, чи встановлено ключ сеансу logged_in.
- public function settings() {…} завантажує сторінку налаштувань, яка також захищена
- публічна функція logout() {…} знищує дані сеансу та виводить користувача з системи. Метод також перенаправляє на сторінку входу
Перегляди сесії CodeIgniter
Створіть наступні подання в програмі/поданнях/сесіях
- 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>
ТУТ,
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 і дізналися, як використовувати її для зберігання тимчасових даних у вигляді миттєвих повідомлень і як зберігати більш постійні дані, тобто дані для входу користувача.