Cum se configurează sesiunea în CodeAprindere cu exemplu
⚡ Rezumat inteligent
CodeIgniter Session Management stochează datele utilizatorilor prin intermediul unor cereri HTTP fără stare, permițând unei aplicații să rețină un utilizator conectat, articole din coș sau mesaje flash unice. Acest exemplu construiește mesagerie flash și o simulare de autentificare folosind CodeBiblioteca de sesiuni Igniter.

CodeGestionarea sesiunilor Igniter
Dacă ați dezvoltat aplicații desktop înainte, probabil știți că puteți defini o variabilă globală, îi puteți atribui o valoare și o puteți utiliza pe tot parcursul ciclului de viață al aplicației. Prin deschiderea și închiderea mai multor formulare, fiecare cerere va avea acces la variabila globală.
Cu alte cuvinte, starea aplicației este menținută. Adică, dacă atunci când te-ai conectat ai setat numele companiei la o variabilă globală, atunci chiar și după ce închizi formularul de conectare, starea numelui companiei este păstrată.
HTTP funcționează puțin diferit față de scenariul pe care tocmai l-am descris. Este fără stare. Adică, orice acțiune ați face într-o cerere nu persistă în următoarea cerere.
Pentru a rezolva această problemă, avem două (2) soluții în PHP. Putem fie să lucrăm cu cookie-uri, care sunt fișiere mici plasate pe computerul utilizatorului, fie să lucrăm cu sesiuni, care sunt similare cookie-urilor, dar sunt stocate pe server și au o capacitate mai mare decât cookie-urile.
Când să folosiți sesiunile?
Sesiunile sunt de obicei utile atunci când doriți să cunoașteți activitățile utilizatorului de la o pagină la alta. De exemplu, să presupunem că aveți o zonă protejată pe site. Utilizatorii nu trebuie să se conecteze pe fiecare pagină. Puteți permite utilizatorului să se conecteze o singură dată și să stocheze detaliile sale într-o variabilă de sesiune, apoi să reutilizeze aceleași date la solicitări ulterioare. Alte cazuri de utilizare includ lucrul la un magazin.ping sistem și utilizatorul trebuie să adauge articole în magazinping cart.
Alternativ, CodeIgniter folosește, de asemenea, sesiuni pentru a face datele disponibile o singură dată la următoarea solicitare. Acest lucru este util atunci când ați editat și actualizat o înregistrare din baza de date și doriți să oferiți feedback utilizatorului atunci când acesta este redirecționat către o altă pagină.
Trimiterea de mesaje Flash către alte pagini cu CI Sessions
În această secțiune, veți afla despre trimiterea de mesaje flash către alte pagini folosind biblioteca de sesiuni în Codeigniter.
Creați un fișier nou SessionController în
application/controllers/SessionController.php
Adăugați următorul cod
<?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')); } }
AICI,
- clasa SessionController extinde CI_Controller {…} definește clasa SessionController și extinde clasa controlerului părinte.
- funcția publică __construct() {…} definește metoda constructorului care inițializează clasa părinte și încarcă url helper și biblioteca de sesiune.
- funcția publică index() {…} definește metoda indexului sesiunii care încarcă vizualizarea indexului sesiunii.
- funcția publică flash_message(){…} definește metoda mesajului flash care setează datele flash apoi redirecționează către ruta flash_index
Să creăm acum vizualizarea care va afișa valoarea datelor sesiunii.
Creați un nou director sesiuni în application/views
Creați un nou fișier index.php în application/views/sessions
Adăugați următorul cod
<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>
AICI,
session->userdata('msg');?> preia valoarea datelor de sesiune cu cheia msg și o afișează în browser.
Să creăm acum rutele pentru metoda noastră flash de sesiune
Deschide aplicația/config/routes.php
Adăugați următoarele rânduri
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
Să pornim acum serverul încorporat pentru PHP și testați mesajele noastre flash
Deschide terminalul
Rulați următoarea comandă
cd C:\Sites\ci-app php -S localhost:3000
AICI,
Comanda de mai sus navighează în directorul de cod al aplicației și pornește serverul încorporat pe portul 3000.
Notă: calea aplicației trebuie să corespundă cu calea de unde ați descărcat CodeIgniter și puteți folosi orice număr de port liber pe computer. Nu este necesar să folosiți portul 3000.
Încărcați următoarele URL în browserul tău web: http://localhost:3000/flash_message
Vei fi redirecționat către următoarele URLși veți obține următoarele rezultate: http://localhost:3000/flash_index
Faceți clic pe butonul de reîmprospătare al browserului dvs. web sau apăsați F5
Acum veți obține următoarele rezultate
Stocarea datelor utilizatorului în sesiunile CI
Să analizăm acum un exemplu puțin mai avansat. Pentru a simplifica, vom simula autentificarea utilizatorului și nu vom face implementarea efectivă a verificării înregistrării utilizatorului în baza de date și a parolei introduse.
Să începem cu rutele
Deschideți routes.php situat în aplicație/config
Adăugați următoarele rute
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
AICI,
- $route['login'] = 'sessioncontroller/login'; definește ruta care afișează formularul de autentificare
- $route['authenticate'] = 'sessioncontroller/authenticate'; definește ruta care simulează autentificarea cu succes a utilizatorului și setează datele de conectare ale sesiunii.
- $route['settings'] = 'sessioncontroller/settings'; definește o pagină protejată care ar trebui să fie accesibilă numai utilizatorilor conectați
- $route['dashboard'] = 'sessioncontroller/tabloul de bord'; definește o pagină protejată care ar trebui să fie accesibilă numai utilizatorilor conectați.
- $route['logout'] = 'sessioncontroller/logout'; deconectează utilizatorul prin distrugerea datelor de sesiune
Să actualizăm acum SessionController-ul
Deschideți aplicația/controlere/SessionController.php
Adăugați următoarele metode
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')); }
AICI,
- public function check_auth($page) {…} definește metoda care verifică dacă utilizatorul este autentificat, apoi permite accesul la pagină. Dacă un utilizator nu este autentificat, atunci utilizatorul este redirecționat către pagina de autentificare cu un mesaj flash.
- public function login() {…} încarcă vizualizarea de autentificare situată în directorul sesiuni.
- funcția publică authenticate() {…} setează datele utilizatorului de sesiune pentru cheile logged_in și username. NOTĂ: Nu verificăm detaliile de conectare în baza de date. Pur și simplu presupunem că detaliile trimise sunt ok și setăm datele sesiunii.
- public function dashboard() {…} încarcă pagina tabloului de bord după apelarea funcției $this->check_auth('dashboard'); care verifică dacă cheia de sesiune logged_in este setată.
- public function settings() {…} încarcă pagina de setări, care este, de asemenea, protejată
- public function logout() {…} distruge datele sesiunii și deconectează utilizatorul. Metoda redirecționează și către pagina de conectare
CodeVizualizări sesiune Igniter
Creați următoarele vizualizări în aplicație/vizualizări/sesiuni
- tabloul de bord.php
- login.php
- setări.php
Adăugați următorul cod la 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>
AICI,
session->userdata('username');?> afișează numele de utilizator pe care l-am setat în metoda de autentificare
Adăugați următorul cod la 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>
AICI,
Formularul de autentificare se trimite către ruta de autentificare.
Adăugați următorul cod la 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>
Asta e tot pentru opiniile noastre. Să testăm acum aplicația noastră.
În acest tutorial, folosim serverul web PHP încorporat, dar puteți folosi orice server web care acceptă PHP.
Deschide terminalul
Rulați următoarea comandă
cd C:\Sites\ci-app php -S localhost:3000
AICI,
Comanda de mai sus navighează în directorul de cod al aplicației și pornește serverul încorporat pe portul 3000.
Notă: calea aplicației trebuie să corespundă cu calea de unde ați descărcat CodeIgniter și puteți folosi orice număr de port liber pe computer. Nu este necesar să folosiți portul 3000.
Deschideți următoarele URL în browserul tău web: http://localhost:3000/dashboard
Vei fi redirecționat către pagina următoare
Faceți clic pe butonul Autentificare
Veți vedea următoarele rezultate
După ce ne conectăm, acum putem vedea datele sesiunii.




