[Powered by Google Translate] [PHP Sesiuni] [Tommy MacWilliam, Universitatea Harvard] [Acest lucru este CS50.] [CS50.TV] Sesiuni în PHP poate fi folosit pentru a pune în aplicare o funcționalitate, cum ar fi datele de conectare de utilizator, în aplicația web. Sesiuni PHP vă permite să se asocieze informații cu întreaga sesiune de navigare a utilizatorului mai degrabă decât pur și simplu o singură pagină. Deci asta înseamnă ca utilizatorul vizitează diferite pagini PHP, care alcătuiesc site-ul dvs., orice informații în sesiunea va persista. Deci asta înseamnă că datele stocate în sesiunea de către o singură pagină pot fi accesate ulterior de către o altă pagină. Stocarea de informații într-o sesiune este ușor, și vom face acest lucru prin semnul dolar, sublinia, variabile SESIUNEA de capital. Semn dolar, sublinia, SESIUNEA-la fel ca semn dolar, de subliniere, GET și semnul dolar, sublinia, POST- este un tablou asociativ format din perechi de valori-cheie. Astfel încât să putem folosi dolar semn-sintaxă ca, de subliniere, SESIUNEA, suport, oferta, foo, oferta, suport, este egal cu, oferta, bar, citat- pentru a stoca valoarea "bar", în cheie "foo". Cu toate acestea, înainte de a putea scrie sau citi din gama sesiune, vom avea nevoie pentru a apela o functie speciala sesiune, subliniere, începe, () - și aceasta va inițializa sesiunii. Deci, haideți să aruncăm o privire la un exemplu. Primul nostru pagină, hello.php, foloseste sesiunea de ieșire unele date de utilizator. Amintiți-vă, vom avea nevoie pentru a utiliza session_start înainte de a putea accesa orice date de sesiune. Acum suntem folosind isset PHP pentru a determina dacă există o cheie în $ _SESSION matrice asociativ. Dacă există cheia, ceea ce înseamnă că utilizatorul a conectat, așa că vom afișa numele utilizatorului. În cazul în care cheia nu este setat, înseamnă că utilizatorul nu a fost încă conectat, așa că vom afișa un link către login.php. Deci, haideți să aruncăm o privire la login.php. Pe aici, avem un singur formular HTML cu o singură intrare. Atribut acțiune a formularului este de $ _SERVER ['PHP_SELF "], și acest lucru înseamnă pur și simplu că dorim ca formularul să fie depus la dosar curent, care, în acest caz, este login.php. Așa că haideți să ne întoarcem la partea de sus a acestui fișier. În cazul în care utilizatorul a depus formularul, apoi $ _POST ['nume'] trebuie să fie setat. Pentru mai multe informații despre forme HTML și poștă, a verifica afară de PHP video de Dezvoltare Web. În cazul în care utilizatorul a făcut formularul, am dori să scrie valoarea pe care au scris în în sesiunea. Acum putem redirecționa utilizatorul la hello.php. Pentru că am stocate de intrare de utilizator în sesiune, hello.php vor putea accesa valoarea care a fost stabilit în login.php. Așa că haideți să verificați acest lucru într-un browser web. În primul rând, vom naviga la http://localhost/hello.php. Putem vedea aici că nu am încă conectat, deci haideți să faceți clic pe link-ul de conectare, care ne va redirecționa către login.php. Bine, o să tastați în numele meu, care va fi apoi stocate în sesiunea. Mare! Acum putem vedea meu de intrare de la login.php pe hello.php prin sesiunea. Deci, ce zici de logare utilizatorul afară? Ei bine, în scopul de a conecta în utilizator, pur și simplu ne-am păstrat o valoare în nume sesiune. Deci, pentru a conecta utilizatorul afară, pur și simplu trebuie să scoateți cheia nume din matrice sesiune. Deci, haideți să aruncăm o privire la acest ultim dosar, logout.php. Încă o dată, vom avea nevoie pentru a apela session_start () înainte de a putea face orice sesiune legate. Acum putem numi pur și simplu session_destroy (), care va avea grijă de a scăpa de toate datele din sesiune și apoi redirecționa utilizatorul înapoi la hello.php. Deci, dacă am faceți clic pe link-ul Log out, putem vedea că serverul a uitat cine sunt eu, și eu nu mai logat Deci, ce se întâmplă aici, sub capota? În scopul de a obține comportamentul tocmai am văzut, serverul nostru trebuie să facă două lucruri. În primul rând, serverul are nevoie pentru a stoca într-un fel de date in sesiunea. Diferitelor dosare PHP care cuprind un site web sunt executate ca invocări separate ale interpretului PHP variabile astfel încât local nu pot fi partajate între ele. In schimb, serverul trebuie să stocheze datele noastre de sesiune într-un loc care mai multe. php pot accesa. În al doilea rând, serverul trebuie să asocieze datele de sesiune cu doar sesiune mea de navigare. Când mă pot loga pe Facebook, există, probabil, milioane de alte persoane, de asemenea, conectat la Facebook, în același timp. Dar serverul are nevoie de o modalitate de a asocia datele mele cu sesiunea mea actuală și date altcuiva cu o altă sesiune. Din fericire, autorii PHP gândit la toate astea pentru noi, așa că nu trebuie să pună în aplicare toate astea noi. Dar haideți să aruncăm o privire la ceea ce face PHP în mod implicit. Când m-am vizita o pagină PHP conține session_start pentru prima dată, PHP va genera o mare valoare aleatorie. Până session_destroy se numește sau nu vizita toate paginile PHP de pe site-ul pentru o vreme, ca valoare aleatoare și, probabil, unic va fi asociat cu mine. În acest fel, serverul are un mod de identificare a sesiunii de navigare spre deosebire de altcuiva. Putem arunca o privire la ID-ul de curent sesiune folosind funcția PHP, session_id. Aici suntem pur și simplu scoate valoarea identificator nostru sesiune. Deci, dacă am logati din nou la exemplul aplicația web, și acum naviga la sessid.php, vom vedea acest lung șir de caractere, și că este identificatorul curent pentru sesiune mea, și că este modul în care serverul este urmărirea cine sunt. Bine, dar am rezolvat doar jumătate din problemă. Sigur, serverul are acum o modalitate de identificare mine, dar când am vizita o altă pagină, serverul are nevoie de a reutiliza același identificator mai degrabă decât generatoare de unul nou. Amintiți-vă, dacă am declara o variabilă locale în foo.php și apoi vizita bar.php, bar.php nu are nici o modalitate de a ști ceea ce sa întâmplat în foo.php. Astfel încât punerea în aplicare sesiune implicit php presupune că browser-ul reaminti server care sesiune ID-ul de a folosi. Acest lucru este implementat sub forma unui cookie. Un cookie-în afară de a fi un delicios snack- este pur și simplu un mic fișier text de pe computer că un server poate scrie la prin intermediul browser-ul web. Deci, după ce PHP genereaza ID-ul meu unic sesiune prin session_start, se va spune browser-ul web pentru a stoca că identificator într-un fișier text local, sau un cookie. Apoi, browser-ul web va include ca identificator în fiecare cerere că nu se face la server. Deci, într-adevăr, serverul web nu este aminte cine sunt. În schimb, browser-ul este pur și simplu amintindu-și identificatorul unic care a fost generat de PHP și apoi amintind în mod constant pe server ceea ce este că identificator. În acest fel, informații cum ar fi numele meu de utilizator este stocat pe serverul nu browser-ul meu. Browser-ul pur și simplu spune serverul pe care PHP stocate că informațiile astfel PHP poate recupera. Astfel că duce la intrebarea, unde este PHP stocarea de fapt aceste informații? În mod implicit, PHP va stoca datele dvs. de sesiune într-un fișier în interiorul / tmp, sau directorul "temp". Numele de fișier care va include ID-ul de sesiune, astfel PHP poate determina care fișier să citească și să scrie de prin doar ID-ul sesiunii. Bine. Deci, haideți să deschidem fila rețea în depanator Chrome prin pictograma cheie din dreapta sus. Acum, să mergem la hello.php din nou. Să faceți clic pe cererea HTTP a hello.php și apoi faceți clic pe Anteturi. Aici putem vedea că antetul cookie conține o cheie numit PHPSESSID, sau sesiune PHP-ID, cu o valoare care este același șir lung-am văzut atunci când am vizitat sessid.php. Acesta este exact modul în care browser-ul este amintindu-server ce ID de sesiune ar trebui să fie utilizat. Este ea, inclusiv într-un antet HTTP. Bine. Să ne întoarcem la terminal. Să navigați la / tmp, în cazul în care PHP este stocarea informațiilor sesiune în mod implicit. Destul de sigur, în interiorul acestui folder temporar, aici este un fișier care conține același ID exact sesiune. Dacă vom deschide acest fișier, putem vedea cum PHP reprezintă sesiune mea pe disc. Aici string "Tommy" sunt stocate pentru cheie "numele" care este exact ceea ce ne așteptam. Și asta este o imagine de ansamblu a sesiunilor în PHP. Ceea ce tocmai am văzut a fost doar punerea în aplicare implicit a sesiuni. De fapt, multe site-uri modifica acest comportament implicit pentru a stoca sesiuni PHP mai eficient în interesul de îmbunătățire a performanței. Numele meu este Tommy, iar acest lucru este CS50. [CS50.TV]