[Powered by Google Translate] [PHP Sessions]
[Tommy MacWilliam, Harvard University]
[Dette er CS50.] [CS50.TV]
Sessions i PHP kan bruges til at implementere funktionalitet,
Ligesom bruger logins, i din web-app.
PHP sessioner giver dig mulighed for at tilknytte information
med brugerens hele browsersession
snarere end blot en enkelt side.
Så det betyder, som brugeren besøger forskellige PHP-sider, der udgør din hjemmeside,
alle oplysninger i sessionen vil fortsætte.
Så det betyder, at data gemt i sessionen med en side
senere kan tilgås af en anden side.
Lagring af oplysninger i en session er nemt,
og vi gør det via dollartegn, understreger, kapital SESSION variabel.
Dollar tegn, understregningstegn, SESSION-ligesom dollartegn, understregning, GET
og dollartegn, underscore, POST-
er et associativt array bestående af centrale værdipar.
Så vi kan bruge syntaks-lignende dollartegn, understregning, Session,
beslag, citerer, foo, citat, konsol lig, citat, bar, citat-
for at gemme værdien "bar" i nøglen "foo".
Men før vi kan skrive eller læse fra session array,
vi bliver nødt til at kalde en særlig funktion,
session, underscore, start () -
og dette vil initialisere session.
Så lad os tage et kig på et eksempel.
Vores første side, hello.php, bruger session til output nogle data til brugeren.
Husk, vi skal bruge session_start, før vi kan få adgang til alle session-data.
Nu bruger vi PHP isset at afgøre, om en nøgle findes
i $ _SESSION associative array.
Hvis denne nøgle findes, betyder at brugeren har logget på,
så vi vil vise brugerens navn.
Hvis dette ikke er angivet, betyder det, brugeren har ikke logget ind endnu,
så vi vil vise et link til login.php.
Så lad os tage et kig på login.php.
Hernede har vi en enkelt HTML-formular med en enkelt indgang.
Formularen indsats attribut er $ _SERVER ['PHP_SELF'],
og det betyder blot, at vi ønsker, at formularen skal indsendes til den aktuelle fil,
som i dette tilfælde, er login.php.
Så lad os gå tilbage til toppen af ​​denne fil.
Hvis brugeren indsendt formularen, så $ _POST ['navn'] skal indstilles.
For mere information om HTML-formularer og post,
tjekke PHP Webudvikling video.
I tilfælde af, at brugeren gjorde indsende formularen,
vi vil gerne skrive den værdi, de har skrevet i ind sessionen.
Nu kan vi omdirigere brugeren til hello.php.
Fordi vi har gemt på brugerens input til session
hello.php vil være i stand til at få adgang til den værdi, der blev sat i login.php.
Så lad os se det i en webbrowser.
Først vil vi navigere til http://localhost/hello.php.
Vi kan se her, at vi ikke har logget ind endnu,
så lad os klikker på login-linket, der vil omdirigere os til login.php.
Okay, jeg skriver i mit navn, som derefter vil blive gemt i sessionen.
Great! Nu kan vi se mit input fra login.php på hello.php via session.
Så hvad med at logge brugeren ud?
Nå, for at logge brugeren ind, vi simpelthen er gemt en værdi i session navn.
Så for at logge brugeren ud, vi simpelthen nødt til at fjerne det navn nøgle
fra session array.
Så lad os tage et kig på denne sidste fil, logout.php.
Igen, vil vi nødt til at kalde session_start ()
før vi kan gøre noget session relateret.
Nu kan vi bare ringe session_destroy ()
som vil tage sig af at slippe af med alle data i sessionen
og derefter omdirigere brugeren tilbage til hello.php.
Så hvis jeg klikker på Log ud linket
Vi kan se, at serveren har glemt, hvem jeg er,
og jeg ikke længere logget ind
Så hvad sker der her under kølerhjelmen?
For at få den adfærd, vi lige har set,
vores server skal gøre 2 ting.
For det første server har brug for en eller anden måde at gemme data i sessionen.
De forskellige PHP-filer, der omfatter en hjemmeside
udføres som separate kald af PHP tolk
så lokal variabel kan ikke deles mellem dem.
I stedet server har brug for at gemme vores session data
i nogle sted at multiple. php filer kan få adgang til.
For det andet, den server har brug for at knytte session data med kun min browsersession.
Når jeg logge ind på Facebook,
er der sandsynligvis millioner af andre mennesker også er logget ind på Facebook på samme tid.
Men serveren har brug for nogle måde at knytte mine data
med min nuværende session og andres data med en anden session.
Heldigvis forfatterne af PHP tænkte over alt dette for os,
så behøver vi ikke at gennemføre noget af dette selv.
Men lad os tage et kig på, hvad PHP gør som standard.
Når jeg besøger en PHP side, der indeholder session_start for første gang,
PHP vil generere en stor tilfældig værdi.
Indtil session_destroy kaldes-eller jeg ikke besøge nogen PHP sider på dette site for et stykke tid,
at tilfældige og sandsynligvis unik værdi vil være forbundet med mig.
På den måde serveren har en måde at identificere min browsersession
i modsætning til en andens.
Vi kan tage et kig på den aktuelle session-ID
ved hjælp af PHP-funktionen, session_id.
Her vil vi blot udsender værdien af ​​vores session id.
Så hvis vi igen logge ind på eksempel web app,
og nu navigere til sessid.php,
vi vil se denne lange streng af tegn,
og det er den nuværende identifikator for min session,
og det er, hvordan serveren er at holde styr på, hvem jeg er.
Okay, men vi har kun løst halvdelen af ​​problemet.
Sure, serveren har nu en måde at identificere mig,
men når jeg besøger en anden side, serveren har brug for at genbruge den samme identifikator
snarere end at generere en ny.
Husk, at hvis jeg erklærer en lokal variabel i foo.php
og derefter besøge bar.php,
bar.php har ingen mulighed for at vide, hvad der skete i foo.php.
Så implementering standard php session kræver, at browseren minde serveren
som session-id til at bruge.
Dette er implementeret i form af en cookie.
En cookie-ud over at være en lækker snack-
er simpelthen en lille tekstfil på din computer
at en server kan skrive til via webbrowseren.
Så efter PHP genererer min unikke session-ID via session_start,
det kommer til at fortælle browseren at gemme denne identifikator i en lokal tekstfil, eller en cookie.
Så web browser vil omfatte, at identifikator i enhver anmodning
at det gør til serveren.
Så virkelig, er web-serveren ikke huske, hvem jeg er.
I stedet er webbrowseren blot huske den entydige identifikator
der blev genereret af PHP og derefter konstant at minde serveren
hvad det id er.
På den måde, oplysninger som mit brugernavn er gemt på serveren ikke min webbrowser.
Browseren simpelthen fortæller den server, hvor PHP er gemt, at oplysninger
så PHP kan hente det.
Så det rejser spørgsmålet, hvor er PHP faktisk lagre disse oplysninger?
Som standard vil PHP gemme dine session data
i en fil inde i / tmp, eller mappen 'temp'.
Navnet på denne fil vil indeholde session id, så PHP kan bestemme
hvilken fil til at læse og skrive fra kun via session-ID.
Ok. Så lad os åbne fanen Netværk i Chromes debugger
via ikonet skruenøgle øverst til højre.
Lad os nu tage til hello.php igen.
Lad os klikke på HTTP-anmodning til hello.php
og klik derefter på headers.
Her kan vi se, at den cookie header indeholder en nøgle kaldet PHPSESSID,
eller PHP session-ID-med en værdi, der er den samme lange snor så vi
da vi besøgte sessid.php.
Dette er præcis, hvordan browseren minde serveren hvilken session-ID skal bruges.
Det er bl.a. det i en HTTP-header.
Ok. Lad os gå tilbage til terminalen.
Lad os navigere til / tmp, hvor PHP er lagring af oplysninger sessionen som standard.
Sure nok, inde i denne midlertidige mappe,
her er en fil, der indeholder nøjagtig de samme session id.
Hvis vi åbner denne fil, kan vi se, hvordan PHP repræsenterer min session på disken.
Her strengen "Tommy" er ved at blive gemt til den nøgle 'navn'
hvilket er præcis, hvad vi havde forventet.
Og det er et overblik over sessioner i PHP.
Hvad vi lige så var kun standard implementering af sessioner.
Faktisk er mange hjemmesider ændre denne standard opførsel
at lagre PHP sessioner mere effektivt
af hensyn til at forbedre ydeevnen.
Mit navn er Tommy, og det er CS50.
[CS50.TV]