În diverse conferințe dedicate programării, în primul rând am fost întotdeauna interesat de astfel de secțiuni precum "Web-programming" și "Scripts". În cea mai mare parte, întrebările despre PHP în astfel de forumuri sunt destul de simple, necesitând doar o înțelegere comună a PHP-ului, totuși cea mai frecventă întrebare pentru observațiile mele este: "Ce sunt sesiunile PHP și ce / cum pot fi mâncate?". Aș dori să clarific această problemă o dată pentru totdeauna.
De la început, PHP a fost acceptat de toți, dar de îndată ce au început să se creeze suficiente proiecte în această limbă, dezvoltatorii s-au confruntat cu o nouă problemă: PHP nu avea noțiunea de variabile globale! Adică, a fost executat un anumit script, a trimis pagina generată clientului și toate resursele folosite de acest script au fost distruse. Voi încerca să ilustrez: să presupunem că există două pagini ale unui site, index.php și dothings.php. Sursele pentru aceste pagini arata astfel:
$ a = "Am fost atribuit index.php";
Dacă executați aceste două scripturi, atunci pe prima pagină vedem inscripția "Am fost atribuită index.php", iar a doua pagină va fi goală.
Nu voi intra în problemele tehnologice ale mecanismului de lucru al sesiunilor, ci va descrie doar modul de lucru cu sesiunile din PHP.
Cum să lucrați cu sesiunile?
Dacă testați exemplele din articol (sau script-urile dvs.) pe orice gazdă comercială, nu ar trebui să existe probleme cu lucrul cu sesiunile. Dacă ați configurat serverul dvs. (fie un server real sau un emulator), pot apărea erori despre acesta:
"Avertisment: a deschis (/ var / state / php / sess_6f71d1dbb52fa88481e752af7f384db0, O_RDWR) a eșuat: Nici un astfel de fișier sau director (2)".
Aceasta înseamnă doar că aveți un PHP greșit configurat. Puteți rezolva această problemă scriind calea corectă (la directorul existent) pentru a salva sesiunile din fișierul php.ini și a reporni serverul.
Orice script care va folosi variabilele (datele) din sesiuni ar trebui să conțină următoarea linie:
Această comandă indică serverului că această pagină are nevoie de toate variabilele asociate cu acest utilizator (browser). Serverul ia aceste variabile (dintr-un fișier sau dintr-o bază de date) și le pune la dispoziție. Este foarte important să deschideți o sesiune înainte ca orice date să fie trimise utilizatorului; în practică, aceasta înseamnă că funcția session_start () trebuie apelată chiar la începutul paginii, de exemplu:
După începerea sesiunii, puteți specifica variabilele globale. Acest lucru este elementar: numim session_register ('var_name'); și $ var_name devin disponibile pe toate paginile care utilizează sesiunea. De exemplu, descoperim programul dat la începutul articolului:
// setați valoarea variabilei
$ a = "Am fost atribuit index.php";
// înregistrați o variabilă cu o sesiune deschisă
// important: numele variabilelor sunt transmise funcției session_register ()
Când executați aceste fișiere (într-o ordine logică de curs), primul script (index.php) va returna următorul rezultat:
Totul este OK. Sesiunea încărcată! Să mergem să vedem ce este acolo:
Și a doua (dothings.php) este următoarea:
Am fost repartizat la index.php
Variabila $ a este acum disponibilă în toate paginile acestui site care au început sesiunea.
Alte funcții utile pentru lucrul cu sesiunile:
session_unregister (șir) - sesiune <забывает> valoarea variabilei globale date;
session_destroy () - sesiunea este distrusă (de exemplu, dacă utilizatorul a părăsit sistemul făcând clic pe buton <выход>);
session_set_cookie_params (int durata de viata [, path string [, string]]) - cu aceasta functie puteti seta cat timp va dura <жить> sesiune specificând unix_timestamp definind timpul <смерти> sesiune. Implicit, sesiune <живёт> până când clientul închide fereastra browserului.
Acum, să ne îndreptăm spre aplicarea practică a mecanismului sesiunilor. Să ne uităm la câteva exemple destul de simple și în același timp utile.