Как да зададете сесия в Codeigniter с пример
Управление на сесии на CodeIgniter
Ако сте разработвали настолни приложения преди това, вероятно знаете, че можете да дефинирате глобална променлива, да й присвоите стойност и да я използвате през целия жизнен цикъл на приложението, отваряйки и затваряйки повече от едно (1) и всяка заявка ще има достъп до глобалната променлива.
С други думи, състоянието на приложението се поддържа. Тоест, ако когато влезете, зададете името на компанията на глобална променлива, тогава дори след като затворите формата за вход, това състояние на името на компанията се запазва.
HTTP работи малко по-различно от горния сценарий, който току-що описахме. То е без гражданство. Това означава, че каквото и да правите в една заявка, не остава в следващата заявка. Т
o заобиколете този проблем. Имаме две (2) решения в PHP. Можем да работим или с бисквитки, които са малки файлове, поставени на компютъра на потребителя, или със сесии, които са подобни на бисквитките, но вместо това се съхраняват на сървъра и имат по-голям капацитет от бисквитките.
Кога да използвате сесии?
Сесиите обикновено са полезни, когато искате да знаете дейностите на потребителя от страница на страница. Например, да кажем, че имате защитена зона на уебсайта. Потребителите не трябва да влизат на всяка страница. Можете да позволите на потребителя да влезе веднъж и да съхраните неговите данни в променлива на сесията, след което да използвате повторно същите данни при следващи заявки. Други случаи на употреба включват, когато работите върху система за пазаруване и потребителят трябва да добави артикули към количката за пазаруване.
Алтернативно, 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')); } }
ТУК,
- class SessionController extends CI_Controller {…} дефинира класа SessionController и разширява родителския клас контролер.
- публична функция __construct() {…} дефинира метода на конструктора, който инициализира родителския клас и зарежда помощния URL адрес и библиотеката на сесиите.
- публична функция 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, намиращ се в 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/вход'; дефинира маршрута, който показва формата за влизане
- $route['authenticate'] = 'sessioncontroller/authenticate'; дефинира маршрута, който симулира успешно влизане на потребител и задава данните за влизане в сесията.
- $route['settings'] = 'sessioncontroller/settings'; дефинира защитена страница, която трябва да бъде достъпна само за влезли потребители
- $route['dashboard'] = 'sessioncontroller/dashboard'; дефинира защитена страница, която трябва да бъде достъпна само за влезли потребители.
- $route['logout'] = 'sessioncontroller/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
Създайте следните изгледи в приложение/изгледи/сесии
- табло.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
ще бъдете пренасочени към следващата страница
Кликнете върху бутона Вход
Ще видите следните резултати
След като влезем, вече можем да видим данните за сесията.
Oбобщение
В този урок научихте основите на библиотеката за сесии на CodeIgniter и научихте как да я използвате за съхраняване на временни данни като флаш съобщения и как да използвате съхраняване на по-постоянни данни, т.е. потребителски данни за влизане.