[Powered by Google Translate] [PHP Sessions]
[Tommy MacWilliam, Harvard University]
[To je CS50.] [CS50.TV]
Zasedanja v PHP se lahko uporablja za izvajanje funkcij,
kot uporabniške prijave, v vašo spletno aplikacijo.
PHP sej vam omogočajo, da povežete informacije
z uporabnikovim celotno sejo
ne le kot eno stran.
Torej to pomeni, da ko uporabnik obišče različne PHP strani, ki sestavljajo vaše spletne strani,
kakršne koli informacije v seji bodo prisotni.
To pomeni, da so podatki, shranjeni v seji z ene strani
se lahko kasneje dostopate z drugo stranjo.
Shranjevanje podatkov na seji je enostavno,
in mi tako preko znak za dolar, podčrtaj, kapital SESSION spremenljivko.
Znak za dolar, podčrtaj, SESSION, tako kot znak za dolar, podčrtaj, GET
in znak za dolar, podčrtaj, POST-
je asociativna niz je sestavljen iz parov vrednosti ključev.
Tako da bomo lahko uporabite-skladenjsko kot znak za dolar, podčrtaj, sklepih,
nosilec, citiram, foo, citiram, nosilec, je enaka, citiram, bar, quote-
Shranjevanje vrednost "bar", v ključnem "foo".
Vendar pa, preden bomo lahko pišejo ali berejo iz matrike seje,
bomo morali poklicati posebno funkcijo-
seji, podčrtaj, začeti () -
in to bo inicializacijo sejo.
Torej, dajmo si oglejte primer.
Naša prva stran, hello.php, uporablja sejo za izhod nekaj podatkov k uporabniku.
Ne pozabite, da bomo morali uporabiti session_start, preden bomo lahko dostop do vseh podatkov seje.
Zdaj smo s pomočjo PHP Isset da ugotovi, ali obstaja ključ
v $ _SESSION asociativni array.
Če ta ključ obstaja, kar pomeni, da je uporabnik prijavljen,
Tako bomo prikazali uporabniškega imena.
Če se da ključ ni nastavljen, kar pomeni, da uporabnik še ni prijavljen
Tako bomo prikazali povezavo do login.php.
Tako da je lahko pogled na login.php.
Dol, imamo eno samo obliko HTML z enim samim vhodom.
Akcijski atribut obliki je $ _SERVER ['PHP_SELF'],
in to preprosto pomeni, da želimo, da obrazec je treba predložiti v trenutni datoteki,
, ki je v tem primeru, je login.php.
Torej, pojdimo nazaj na vrh te datoteke.
Če je uporabnik predložil obrazec, nato pa $ _POST ['name'] je treba določiti.
Za več informacij o HTML obrazcev in delovno mesto,
preverite PHP Web Development video.
V primeru, da uporabnik ni predložil obrazec,
Radi bi napisali vrednost, ki so ga vnesli v na seji.
Sedaj lahko preusmerite uporabnika na hello.php.
Ker smo shranjen vnos uporabnika v seji
hello.php bodo mogli dostopati do vrednosti, ki je bila ustanovljena leta login.php.
Tako da je ček to jasno v spletnem brskalniku.
Najprej bomo krmarite do http://localhost/hello.php.
Vidimo lahko, da tukaj še nismo prijavljeni,
tako da je klik na povezavo za prijavo, ki nas bo preusmeril na login.php.
Ok, bom vnesite svoje ime, ki bi se nato shranili v seji.
Super! Zdaj lahko vidimo, moj vložek login.php na hello.php preko seje.
Torej, kaj pa se prijavite uporabnik ven?
No, da se prijavite uporabnika v, preprosto shranjena vrednost v imenu seje.
Tako, da se prijavite uporabnik ven, smo preprosto morali odstraniti, da ime ključa
Iz matrike seje.
Tako da je lahko pogled na to zadnjo datoteko, logout.php.
Še enkrat, bomo morali poklicati session_start ()
Pred moremo storiti ničesar sejo povezano.
Sedaj lahko preprosto pokličete session_destroy ()
, ki bo poskrbel, da se znebi vseh podatkov v seji
in nato preusmeriti uporabnika nazaj na hello.php.
Torej, če kliknem na Odjava povezavo,
lahko vidimo, da se je strežnik pozabil, kdo sem,
in sem več prijavljeni
Torej, kaj se dogaja pod pokrovom?
Da bi dobili vedenje smo pravkar videli,
naš strežnik mora narediti 2 stvari.
Prvič, strežnik mora nekako shranjevanje podatkov v seji.
Različne PHP datotek, ki sestavljajo spletno stran
se izvajajo kot samostojne priklici PHP tolmača
Tako lokalna spremenljivka ni mogoče deliti med njimi.
Namesto tega strežnik potrebuje za shranjevanje naših podatkov seje
v nekem kraju, da se lahko več. php datoteke dostop.
Drugič, strežnik mora povezati podatke o seji s samo mojim brskanjem.
Ko sem se prijavite na Facebook,
verjetno obstaja milijone drugih ljudi zabeleženo tudi v Facebook istočasno.
Ampak strežnik potrebuje nek način povezuje moje podatke
z mojo trenutno sejo in podatkov nekdo drug z drugega zasedanja.
Na srečo, so avtorji PHP razmišljal o vsem tem za nas,
tako da nam ni treba izvajati vse to sami.
Vendar pa si oglejte, kaj počne PHP privzeto.
Ko sem obiskal stran, PHP, ki vsebuje session_start prvič,
PHP bo ustvarila veliko naključno vrednost.
Dokler se session_destroy ti ali jaz ne obišče PHP strani na tem mestu za nekaj časa,
da naključno in verjetno edinstvena vrednost bo povezana z menoj.
Na ta način ima strežnik na nek način identificirati svojo sejo brskanja
za razliko od nekoga drugega.
Mi lahko ogledate na trenutni ID seje
s funkcijo PHP, session_ID.
Tukaj smo preprosto prikazovanje vrednosti našega identifikatorja seje.
Torej, če bomo ponovno prijaviti na primer spletno aplikacijo,
in zdaj se pomaknite do sessid.php,
bomo videli ta dolg niz znakov,
in da je sedanja identifikator za mojo seji,
in to je, kako se strežnik sledenja, kdo sem.
Ok, ampak smo rešili le polovico problema.
Seveda, strežnik je sedaj na nek način me je ugotavljanje,
ampak ko sem obiskal eno stran, strežnik potrebuje za ponovno uporabo to isto oznako
namesto ustvarjanja novega.
Ne pozabite, če izjavljam lokalno spremenljivko foo.php
in potem obiščite bar.php,
bar.php nikakor ne more vedeti, kaj se je zgodilo v foo.php.
Torej izvajanje seja privzeta php zahteva, da brskalnik opomni strežnik
ki seje ID za uporabo.
To se izvaja v obliki piškot.
Piškotek, poleg tega, da delicious snack-
je le majhna besedilna datoteka v računalniku
da lahko strežnik pisati prek spletnega brskalnika.
Torej, po PHP ustvari svoj edinstven ID seje preko session_start,
to bo povedal, spletni brskalnik za shranjevanje, da identifikator v lokalni besedilno datoteko ali piškotek.
Potem bo spletni brskalnik, da to identifikator v vsaki zahtevi
, da naredi s strežnikom.
Torej res, je spletni strežnik ne spominja, kdo sem.
Namesto tega Spletni brskalnik je enostavno zapomniti enotni identifikator
, ki je bila ustvarjena z PHP in nato ves čas opozarjali strežnik
kaj je identifikator.
Tako podatki kot moj uporabniško ime je shranjena na strežniku ni moj spletnega brskalnika.
Brskalnik preprosto pove strežniku, kjer PHP shranjene te informacije
tako da lahko PHP znova pridobiti.
Tako da se postavlja vprašanje, kje je PHP dejansko shranjevanje teh informacij?
Privzeto je, da se bo PHP shranite podatke o seji
v datoteki znotraj dne / tmp ali mapo "temp".
Ime te datoteke bodo vključevale ID seje, tako da lahko PHP ugotoviti
katere datoteke brati in pisati samo prek ID seje.
Vse je v redu. Torej, kaj je odprla jeziček omrežij v iskanje in odpravljanje napak Chrome
preko ikone ključa v desnem zgornjem kotu.
Zdaj pa pojdimo še enkrat hello.php.
Oglejmo kliknite na zahtevo HTTP na hello.php
in nato kliknite na glavah.
Tukaj lahko vidimo, da glava piškotek vsebuje ključ, imenovano PHPSESSID,
ali PHP ID seje, z vrednostjo, ki je ta isti dolg niz smo videli
ko smo obiskali sessid.php.
To je točno, kako se brskalnik spominja na strežnik, kar seje ID je treba uporabiti.
To je tudi v glavi HTTP.
Vse je v redu. Pojdimo nazaj na terminal.
Oglejmo pluti v / tmp, kjer PHP je shranjevanje podatkov o seji, ki ga privzeto.
Seveda dovolj, znotraj tega začasno mapo,
tukaj je datoteka, ki vsebuje točno isto ID seje.
Če bomo odprli to datoteko, lahko vidimo, kako je PHP, ki predstavlja mojo sejo na disku.
Tu niz "Tommy" se shranijo za ključno "ime"
kar je točno to, kar smo pričakovali.
In to je pregled sej v PHP.
Kar smo pravkar videli, je bil le privzeti izvajanje sej.
Dejstvo je, mnoge spletne strani spremeniti to privzeto vedenje
bolj učinkovito shranjevanje PHP sej
V interesu izboljšanja uspešnosti.
Moje ime je Tommy, in to je CS50.
[CS50.TV]