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.
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.
Să mergem rapid printr-un flux comun de conectare pentru un site web pentru a înțelege ce se întâmplă în spatele scenei.
PHPSESSID
cookie în antetul de răspuns.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.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.
Î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.
session_start
FuncţieAceasta 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.
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.
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.
Î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.
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.
Î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.
Î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.