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.

  • 🌐 De ce sesiuni: HTTP este fără stare, așadar sesiunile păstrează datele utilizatorilor, cum ar fi starea de conectare, pe mai multe solicitări de pagini separate de pe server.
  • 🍪 Cookie-uri vs. sesiuni: Cookie-urile stochează date de mici dimensiuni pe computerul utilizatorului, în timp ce sesiunile stochează date mai mari pe server și sunt mai sigure pentru valorile sensibile.
  • 💨 Date flash: Funcția set_flashdata() stochează un mesaj disponibil doar la următoarea solicitare, ideal pentru feedback unic după o redirecționare.
  • 🔑 Datele utilizatorului: `set_userdata()` păstrează valori precum `username` și `logged_in` pentru întreaga sesiune, iar `unset_userdata()` le șterge la deconectare.
  • 🛡️ Controlul accesului: O metodă reutilizabilă check_auth() redirecționează vizitatorii către pagina de conectare ori de câte ori lipsește cheia de sesiune logged_in.
  • 🧪 Exemplu de lucru: Tutorialul prezintă rute, un controler și vizualizări în stil Bulma pentru a demonstra fluxurile de sesiuni flash și persistente.
  • 🤖 Asistență AI: Instrumentele de inteligență artificială pot structura controlerele de sesiune, pot genera hărți de rută și pot semnala gestionarea nesigură a sesiunilor înainte de implementare.

CodeGestionarea sesiunilor 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

Trimiterea de mesaje flash către alte pagini

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

Trimiterea de mesaje flash către alte pagini

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

CodeVizualizări sesiune Igniter

Faceți clic pe butonul Autentificare

Veți vedea următoarele rezultate

CodeVizualizări sesiune Igniter

După ce ne conectăm, acum putem vedea datele sesiunii.

Întrebări frecvente

Datele utilizatorului persistă pe întreaga sesiune până când le dezactivați sau sesiunea expiră. Datele flash sunt o valoare temporară care supraviețuiește doar următoarei solicitări și apoi este eliminată automat, ceea ce este potrivit pentru mesajele unice.

Tempdata sunt date de sesiune cu un timp de expirare stabilit. Apelați mark_as_temp() sau set_tempdata() cu o durată de viață în secunde, după care CodeIgniter elimină automat valoarea, chiar dacă sesiunea este încă activă.

În mod implicit CodeIgniter stochează sesiunile folosind fișiere de pe server. Puteți comuta driverul la baza de date, Redis sau Memcached în fișierul de configurare atunci când aveți nevoie de spațiu de stocare partajat pe mai multe servere.

Da. Inteligența artificială poate verifica configurația sesiunii pentru setări slabe, poate recomanda regenerarea ID-ului sesiunii după conectare, activarea criptării cookie-urilor și utilizarea cookie-urilor exclusiv HTTPS pentru a reduce riscurile de deturnare a sesiunii.

Da. Dintr-o scurtă descriere, inteligența artificială poate produce rutele, un controler de sesiune și vizualizările protejate. Adăugați întotdeauna verificarea reală a bazei de date și hashing-ul parolei, deoarece schelele inteligenței artificiale utilizează adesea verificări simulate.

Rezumați această postare cu: