Sesiuni în php - informatică, programare

Î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.

Introduceți parola, muritor

Nume de utilizator:

parola:

Bună ziua, , vă aflați pe pagina secretă. )

Deci, putem transfera identificatorul dintr-o pagină (script-ul PHP) într-altul (până la următorul apel de pe site-ul nostru), ceea ce înseamnă că putem distinge toți vizitatorii de site-ul. Din moment ce identificatorul de sesiune este un număr foarte mare (128 biți), practic nu există șanse să fie posibilă preluarea căutării. Prin urmare, atacatorul are următoarele opțiuni:

pe computerul utilizatorului este <троян>, care fură numerele de sesiuni;

un atacator captează traficul între computerul utilizatorului și server. Desigur, există un protocol SSL securizat (criptat), dar nu toate îl folosesc;

Un vecin a venit la calculatorul utilizatorului nostru și a furat numărul sesiunii.

Astfel de situații, bazate pe faptul că cineva fură ceva de la cineva, în general, nu intră în competența programatorului. Acest lucru ar trebui să fie gestionat de administratori și utilizatori înșiși.

Fișierul autorize.php este o încercare de a selecta o parolă utilizând un script de terță parte;

Deci, în programul nostru putem vedea clar două <дыры>, unul mic și nu deosebit de vizibil, dar cel de-al doilea - doar un imens, prin care majoritatea hackerilor și urca la locul unde nu aveți nevoie.

Cum poate <залатать> gaura nr. 1?

// calea completă la directorul rădăcină unde sunt localizate scripturile

// dacă utilizatorul a venit de pe orice pagină a site-ului nostru

// atunci este ca și al nostru.

// variabila $ HTTP_REFERER este întotdeauna disponibilă implicit

// din valoarea în $ SERVER_ROOT

// datele au fost trimise prin formular?

// La fel ca înainte

Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare

Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare
Sesiuni în php - informatică, programare







Articole similare

Trimiteți-le prietenilor: