[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Sveučilište Harvard] [To je CS50.] [CS50.TV] Sjednice u PHP-u može se koristiti za provedbu funkcionalnost, kao korisnički prijave, u vašem web app. PHP sjednice Vam omogućiti povezivanje informacija korisnikov cijele sesije nego jednostavno jednoj stranici. Dakle, to znači da kao korisnik posjećuje razne PHP stranica koje čine vaše web stranice, bilo kakva informacija na sjednici će ustrajati. Dakle, to znači da su podaci pohranjeni u sjednici jednoj stranici se kasnije mogu pristupiti drugoj stranici. Pohranjivanje podataka na sjednici je lako, i mi to učiniti putem znak za dolar, naglašavaju, grad SESSION varijable. Znak dolara, naglašavaju, SESSION-baš kao znak za dolar, naglašavaju, GET i znak dolara, naglašavaju, POST- je asocijativni niz koji se sastoji od ključnih parova vrijednosti. Tako možemo koristiti sintakse poput znak dolara, naglašavaju, sjednica, Nosač, citat, Foo, citiram, nosač, jednako, citiram, bar, citat- Za spremanje vrijednosti "bar" u ključnom "foo". Međutim, prije nego što možemo pisati ili čitati iz prijave niz, ćemo morati zvati posebnu funkciju- sjednici, naglašavaju, start, () - a to će započeti sjednicu. Tako ćemo pogledati primjer. Naša prva stranica, hello.php, koristi sjednicu na izlazu neke podatke za korisnika. Zapamtite, mi ćemo morati koristiti session_start prije nego što možete pristupiti s bilo podataka o prijavi. Sada smo pomoću PHP-a isset bi se utvrdilo je li ključ postoji u $ _SESSION asocijativni niz. Ako taj ključ postoji, to znači da korisnik prijavljen u, pa ćemo prikazati na ime. Ako se taj ključ nije postavljena, to znači da korisnik nije logiran još, pa ćemo prikazati link na login.php. Tako ćemo pogledati login.php. Ovdje dolje, imamo jednu HTML obrazac s jednim ulazom. Obliku akcija atribut $ _SERVER ['PHP_SELF'], a to jednostavno znači da želimo Obrazac se podnosi u trenutnu datoteku, koji, u ovom slučaju, je login.php. Tako ćemo se vratiti na vrh ove datoteke. Ako korisnik podnosi obrazac, onda $ _POST ['ime'] mora biti postavljena. Za više informacija o HTML forme i post, provjerite PHP Web Development video. U slučaju da korisnik učinio dostaviti obrazac, smo željeli napisati vrijednost koju su upisali u na sjednici. Sada možemo preusmjeriti korisnika na hello.php. Zato smo pohranjeni korisnikov ulaz na sjednici, hello.php će biti u mogućnosti pristupiti na vrijednost koja je bila postavljena u login.php. Tako ćemo provjeriti ovo u web pregledniku. Prvo, mi ćemo ploviti na http://localhost/hello.php. Možemo vidjeti da se ovdje nismo prijavljeni još, pa neka je kliknite na link za prijavu koji će nas preusmjeriti na login.php. U redu, ja ću upisati u moje ime, koje će potom biti pohranjeni na sjednici. Izvrsno! Sada možemo vidjeti moj ulaz iz login.php na hello.php preko sjednici. Dakle, što je s prijavom korisnika out? Pa, kako bi se prijavili korisnika u, mi jednostavno pohraniti vrijednost u ime prijave. Tako da se prijavite korisniku out, jednostavno trebamo ukloniti to ime tipku iz prijave niz. Tako ćemo pogledati na ovom posljednjem datoteku, logout.php. Još jednom, mi ćemo morati zvati session_start () Prije nego što možemo učiniti ništa u vezi sjednicu. Sada možemo jednostavno nazvati session_destroy (), koji će se pobrinuti za dobivanje osloboditi od svih podataka na sjednici a zatim preusmjeriti korisnik se vraća na hello.php. Dakle, ako ja kliknite na odjaviti link, možemo vidjeti da je server je zaboravila tko sam ja, i ja više ne prijavljeni Dakle, ono što se ovdje događa ispod haube? Kako bi dobili na ponašanje smo upravo vidjeli, naš server treba učiniti 2 stvari. Prvo, poslužitelj treba nekako pohraniti podatke u sesiji. Različite PHP datoteka koje čine web stranicu se izvode kao zasebne prizivanja PHP tumača pa lokalna varijabla ne može se dijeliti između njih. Umjesto toga, poslužitelj treba pohraniti svoje podatke session u nekom mjestu da više. php datoteke mogu pristupiti. Drugo, poslužitelj treba povezati podatke sjednici sa samo moje sesije. Kad sam se prijaviti na Facebook, vjerojatno postoje milijuni drugih ljudi i prijavljeni na Facebook-u isto vrijeme. No, poslužitelj treba neki način udruživanja moje podatke s moje trenutne sesije i podataka tuđe s druge sjednice. Srećom, autori PHP misli o svemu tome i za nas, tako da ne morate provesti bilo to i sami. Ali neka se pogled na ono što PHP radi po defaultu. Kad sam posjetiti PHP stranicu koja sadrži session_start po prvi put, PHP će generirati veliku slučajna vrijednost. Do session_destroy se zove ili ne idem na bilo PHP stranica na tom mjestu neko- da slučajna i vjerojatno jedinstvena vrijednost će biti povezan sa mnom. Na taj način poslužitelj ima neki način identificiranja moj pregledavanja sjednicu za razliku od tuđe. Možemo pogledati trenutne ID sesije korištenjem PHP funkcije, session_ID. Ovdje mi jednostavno si izlaza vrijednost našeg identifikator sjednice. Dakle, ako ćemo ponovno prijaviti na primjer web-aplikacije, i sada ploviti na sessid.php, vidjet ćemo ovaj dugi niz likova, i da je sadašnja identifikator za moju sjednici, a to je kako poslužitelj praćenje tko sam ja. Dobro, ali mi smo se samo riješiti pola problema. Naravno, poslužitelj sada ima neki način mi je identificiranje, ali kad sam posjetiti neku drugu stranicu, poslužitelj treba ponovno taj isti identifikator umjesto da stvaraju novu. Zapamtite, ako se proglasi lokalnu varijablu u foo.php a zatim posjetite bar.php, bar.php nema načina da znamo što se dogodilo u foo.php. Dakle provedba prijave zadani php zahtijeva da browser podsjetiti poslužitelj koji prijave ID za korištenje. To se provodi u obliku kolačića. Cookie-osim što je ukusna grickalica jednostavno je mala tekstualna datoteka na računalu da poslužitelj može pisati putem web pregledniku. Dakle, nakon što je PHP generira moj jedinstveni ID sesije putem session_start, to će reći web preglednik za pohranu taj identifikator u lokalnoj tekstualnu datoteku, ili kolačić. Zatim web preglednik će uključiti tog identifikatora u svakom zahtjevu da to čini na poslužitelj. Pa stvarno, web poslužitelj ne sjećajući se tko sam ja. Umjesto toga, web preglednik je jednostavno prisjećajući jedinstveni identifikator da se generira PHP i tada se stalno podsjećati na poslužitelj što je identifikator. Na taj način, informacije kao što su moje korisničko ime je pohranjena na poslužitelju ne moje web pregledniku. Browser jednostavno govori na poslužitelju, gdje PHP pohranjene tu informaciju tako da PHP može ga dohvatiti. Tako da moli na pitanje gdje se zapravo PHP čuvanje te informacije? Po defaultu, PHP će pohraniti svoje sjednice podatke u datoteci unutar / tmp ili mapu 'temp'. Naziv te datoteke će sadržavati ID sesije tako da PHP može odrediti koji file za čitanje i pisanje od samo putem ID sesije. U redu. Tako ćemo otvoriti karticu Network u debugger Chrome putem ikone francuskog ključa u gornjem desnom kutu. Sada ćemo krenuti ponovno hello.php. Idemo kliknite na HTTP zahtjev za hello.php , a zatim kliknite na zaglavlju. Ovdje možemo vidjeti da je header Cookie sadrži ključ zove PHPSESSID, ili PHP session ID-manje vrijednosti koji je taj isti dugi niz smo vidjeli kada smo posjetili sessid.php. To je točno kako je preglednik podsjećajući poslužitelj ono sjednici ID bi trebao biti korišten. To je to, uključujući u HTTP zaglavlju. U redu. Idemo natrag do terminala. Idemo ploviti na / tmp, gdje PHP je spremanje podataka sesije po defaultu. Naravno, unutar ove privremenu mapu, ovdje je datoteka koja sadrži isti točan ID sesije. Ako ćemo otvoriti ovu sliku, možemo vidjeti kako PHP zastupa svoju sjednicu na disku. Ovdje string "Tommy" se sprema za ključ 'naziv' što je točno ono što smo očekivali. I to je pregled sjednica u PHP-u. Ono što smo vidjeli bilo je samo zadani provedba sjednice. U stvari, mnoge web stranice promijeniti ovu zadanu ponašanje pohraniti PHP sjednice učinkovitije u interesu poboljšanja performansi. Moje ime je Tommy, a to je CS50. [CS50.TV]