Cum se utilizează sesiunile și variabilele sesiunii în PHP

Manipularea sesiunilor este un concept cheie în PHP care permite persistența informațiilor despre utilizatori în toate paginile unui site web sau al unei aplicații. În acest post, veți învăța elementele de bază ale procesării sesiunilor în PHP. 

Vom începe cu o explicație a modului în care funcționează sesiunile și modul în care acestea sunt legate de cookie-uri. Apoi, vom examina câteva fragmente de cod care demonstrează cum să lucrați cu sesiunile. Veți învăța cum să creați și să distrugeți sesiunile și cum să modificați variabilele de sesiune.

Ce este o sesiune în PHP?

O sesiune este un mecanism de persistență a informațiilor pe diferite pagini web pentru a identifica utilizatorii în timp ce navighează pe un site sau o aplicație. Te întrebi de ce sunt necesare sesiuni pentru un site web? Pentru a vedea de ce sunt necesare sesiunile, trebuie să ne întoarcem și să vedem cum este proiectat protocolul HTTP pentru a funcționa.

Protocolul HTTP este un protocol fără stat, ceea ce înseamnă că nu există nicio posibilitate ca un server să își poată aminti un anumit utilizator între mai multe solicitări. De exemplu, atunci când accesați o pagină Web, serverul este responsabil de furnizarea conținutului paginii solicitate. Deci, atunci când accesați alte pagini ale aceluiași site web, serverul web interpretează fiecare cerere separat, ca și cum acestea nu s-au legat una de cealaltă. Serverul nu are cum să știe că fiecare solicitare provine de la același utilizator.

Următoarea diagramă descrie protocolul HTTP pe scurt.

În acest model, dacă doriți să afișați informații specifice utilizatorului, va trebui să autentificați un utilizator în fiecare solicitare. Imaginați-vă dacă trebuie să introduceți numele dvs. de utilizator și parola pe fiecare pagină care a afișat informațiile dvs. de profil! Da, ar fi greoaie și nu practic deloc, și aici s-au întâlnit sesiunile.

O sesiune vă permite să partajați informații între diferitele pagini ale unui singur site sau aplicație - astfel ajută la menținerea stării. Acest lucru permite serverului să știe că toate cererile provin de la același utilizator, permițând astfel site-ului să afișeze informații și preferințe specifice utilizatorului.

Conectați fluxul cu sesiuni și cookie-uri

Să mergem rapid printr-un flux comun de conectare pentru un site web pentru a înțelege ce se întâmplă în spatele scenei.

  1. Un utilizator deschide pagina de conectare a unui site web.
  2. După trimiterea formularului de autentificare, un server de la celălalt capăt autentifică solicitarea prin validarea acreditărilor introduse.
  3. Dacă acreditările introduse de utilizator sunt valide, serverul creează o nouă sesiune. Serverul generează un număr aleator unic, numit un ID de sesiune. De asemenea, creează un nou fișier pe server, care este utilizat pentru a stoca informațiile specifice sesiunii.
  4. Apoi, un ID de sesiune este transmis utilizatorului, împreună cu orice resursă a fost solicitată. În spatele scenei, acest ID de sesiune este trimis în PHPSESSID cookie în antetul de răspuns.
  5. Când browserul primește răspunsul de la server, acesta se află peste PHPSESSID fila cookie. Dacă cookie-urile sunt permise de browser, acesta va salva acest lucru PHPSESSID cookie, care stochează ID-ul sesiunii trecut de server.
  6. Pentru solicitările ulterioare, PHPSESSID fișierul cookie este transferat înapoi la server. Când serverul intră peste PHPSESSID cookie, va încerca să inițializeze o sesiune cu acel id de sesiune. Se face prin încărcarea fișierului sesiune care a fost creat mai devreme în timpul inițializării sesiunii. Se va inițializa apoi variabila matrice super-globală $ _SESSION cu datele stocate în fișierul sesiune.

În acest fel, datele de utilizator sunt păstrate în mai multe solicitări, iar utilizatorul este păstrat logat pe parcursul unei sesiuni.

Următoarea diagramă descrie modul în care protocolul HTTP funcționează cu sesiunile.

Acum că ați văzut o scurtă introducere a modului în care funcționează sesiunile, vom crea câteva exemple practice pentru a demonstra cum să creați și să manipulați variabilele sesiunii.

Cum să începeți o sesiune

În această secțiune, vom discuta cum să începeți o sesiune în PHP.

Ori de câte ori doriți să faceți față variabilelor de sesiune, trebuie să vă asigurați că sesiunea este deja începută. Există câteva moduri în care puteți începe o sesiune în PHP.

Folosește session_start Funcţie

Aceasta este metoda pe care o veți vedea cel mai des, unde o sesiune este pornită de către session_start funcţie.

Cel mai important este faptul că session_start trebuie să fie apelată la începutul scriptului, înainte ca orice ieșire să fie trimisă browserului. În caz contrar, veți întâlni infamul Antetele sunt deja trimise eroare.

Începeți automat o sesiune

Dacă este nevoie să utilizați sesiuni în întreaga aplicație, puteți de asemenea să vă înscrieți pentru a începe o sesiune în mod automat fără a utiliza funcția session_start funcţie.

Există o opțiune de configurare în php.ini fișier care vă permite să începeți automat o sesiune pentru fiecare solicitare-session.auto_start. În mod prestabilit, este setat la 0, și puteți să-l setați 1 pentru a activa funcția de pornire automată.

session.auto_start = 1

Pe de altă parte, dacă nu aveți acces la php.ini fișier și utilizați serverul web Apache, puteți seta această variabilă și utilizând .htaccess fişier.

php_value session.auto_start 1

Dacă adăugați linia de mai sus în .htaccess fișier, care ar trebui să înceapă automat o sesiune în aplicația dvs. PHP.

Cum se obține un ID de sesiune

După cum am discutat mai devreme, serverul creează un număr unic pentru fiecare sesiune nouă. Dacă doriți să obțineți un ID de sesiune, puteți utiliza sesiune ID funcție, după cum se arată în fragmentul următor.

Aceasta ar trebui să vă dea id-ul sesiunii curente. sesiune ID funcția este interesantă prin faptul că poate lua și un argument - un ID al sesiunii. Dacă doriți să înlocuiți id-ul de sesiune generat de sistem cu propriul dvs., îl puteți furniza primului argument al lui sesiune ID funcţie.

Este important să rețineți că sesiune ID funcția trebuie plasată înainte de session_start sunați când doriți să începeți o sesiune cu un ID de sesiune personalizat.

Cum se creează variabile de sesiune

În această secțiune, vom examina modul de inițializare a variabilelor sesiunii în PHP.

Așa cum am discutat mai devreme, odată ce o sesiune a început, $ _SESSION matricea super-globală este inițializată cu informațiile de sesiune corespunzătoare. Implicit, este inițializat cu o matrice goală și puteți stoca mai multe informații utilizând o pereche cheie-valoare.

Să trecem prin următorul exemplu de script care demonstrează cum să inițializați variabilele de sesiune.

După cum puteți vedea, am început o sesiune la începutul scenariului utilizând session_start funcţie. După aceasta, am inițializat câteva variabile de sesiune. În final, am accesat aceste variabile utilizând $ _SESSION super-globală.

Când stocați datele într-o sesiune utilizând $ _SESSION super-global, este stocat în cele din urmă într-un fișier de sesiuni corespunzător de pe server, care a fost creat la începerea sesiunii. În acest fel, datele sesiunii sunt partajate în mai multe solicitări.

După cum am discutat, informațiile despre sesiune sunt partajate în cereri, astfel încât variabilele de sesiune inițializate pe o singură pagină pot fi accesate și din alte pagini, până la expirarea sesiunii. În general, o sesiune expiră când browserul este închis.

Modificarea și ștergerea variabilelor sesiunii

Puteți modifica sau șterge variabilele de sesiune create mai devreme în aplicație în același mod ca și pentru variabilele regulate PHP.

Să vedem cum să modificăm variabilele de sesiune.

În scriptul de mai sus, am verificat dacă $ _SESSION [ 'count'] este setată în primul rând. Dacă nu este setat, o vom pune 1, altfel o vom incrementa 1. Deci, dacă reîmprospătați această pagină de mai multe ori, ar trebui să vedeți că numărul de contoare este incrementat de fiecare dată! 

Pe de altă parte, dacă doriți să ștergeți o variabilă de sesiune, puteți utiliza funcția unset funcție, după cum se arată în fragmentul următor.

Astfel, nu mai puteți accesa $ _SESSION [ 'logged_in_user_id'] variabilă după cum este șters de către unset funcţie. Deci puteți modifica informațiile despre sesiune.

Cum să distrugi o sesiune

În această secțiune, vom vedea cum puteți distruge o sesiune. În secțiunea anterioară, am discutat despre unset funcția, care este utilizată dacă doriți să ștergeți variabilele de sesiune specifice. Pe de altă parte, dacă doriți să ștergeți simultan toate datele legate de sesiune, puteți utiliza funcția session_destroy funcţie.

Să încercăm să înțelegem cum funcționează utilizând exemplul următor.

session_destroy funcția șterge tot ce este stocat în sesiunea curentă. Astfel, veți vedea un gol $ _SESSION variabilă de la solicitările ulterioare, deoarece datele de sesiune stocate pe disc au fost șterse de către session_destroy funcţie.

În general, ați folosi session_destroy atunci când utilizatorul este deconectat.

Concluzie

În acest articol, am analizat elementele de bază ale procesării sesiunilor în PHP. Este un concept cheie care vă permite să persistați informații pe paginile web.

În prima jumătate a articolului am discutat despre conceptele de bază ale sesiunilor și mai târziu am creat câteva exemple PHP pentru a demonstra cum puteți crea și distruge sesiunile, precum și manipularea variabilelor de sesiune.

Cod