[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [Dette er CS50.] [CS50.TV] Økter i PHP kan brukes til å implementere funksjonalitet, som brukerpålogginger, i din web-app. PHP økter tillate deg å knytte informasjon med brukeren hele leseøkt snarere enn bare en enkelt side. Så det betyr som brukeren besøker ulike PHP sider som utgjør nettstedet ditt, all informasjon i økten vil vedvare. Så det betyr at data som er lagret i økten ved én side kan senere bli tilgjengelig ved en annen side. Lagring av informasjon i en økt er lett, og vi gjør det via dollartegn, understrek, hovedstaden SESSION variabel. Dollartegn, understrek, SESSION-akkurat som dollartegn, understrek, GET og dollartegn, understrek, POST- er en assosiativ array bestående av sentrale verdi-par. Så vi kan bruke syntaks-lignende dollartegn, understrek, SESSION, brakett, sitat, foo, sitat, brakett, lik, sitat, bar, sitat- for å lagre verdien "bar" i nøkkelen "foo". Men før vi kan skrive eller lese fra økten array, vi må kalle en spesiell funksjon- sesjon, understrek, start, () - og dette vil initial økten. Så la oss ta en titt på et eksempel. Vår første side, hello.php, bruker session for å sende ut noen data til brukeren. Husk, vi må bruke session_start før vi får tilgang til noen sesjonsdata. Nå bruker vi PHP isset å avgjøre om en nøkkel eksisterer i $ _SESSION assosiativ array. Hvis denne nøkkelen finnes, betyr at brukeren har logget inn, så vi vil vise brukerens navn. Hvis denne nøkkelen ikke er satt, betyr at brukeren ikke har logget inn enda, så vi vil vise en kobling til login.php. Så la oss ta en titt på login.php. Her nede, har vi et enkelt HTML-skjema med en enkel inngang. Skjemaets handling attributt er $ _SERVER ['PHP_SELF'], og dette betyr bare at vi vil at skjemaet skal sendes til den aktuelle filen, som i dette tilfellet, er login.php. Så la oss gå tilbake til toppen av denne filen. Hvis brukeren sendt inn skjemaet, deretter $ _POST ['name'] må angis. For mer informasjon om HTML-skjemaer og innlegg, sjekk ut PHP Web Development video. I tilfelle at brukeren gjorde sende inn skjemaet, vi ønsker å skrive den verdien som de skrev i inn i økten. Nå kan vi omdirigere brukeren til hello.php. Fordi vi har lagret på brukerens input inn i økten, hello.php vil kunne få tilgang til den verdien som ble satt i login.php. Så la oss sjekke dette ut i en nettleser. Først vil vi gå til http://localhost/hello.php. Vi ser her at vi ikke har logget inn enda, så la oss klikke påloggingsadresse, noe som vil omadressere oss til login.php. Ok, jeg skal skrive om i mitt navn, som deretter vil bli lagret i økten. Flott! Nå kan vi se mitt innspill fra login.php på hello.php via økten. Så, hva om logger brukeren ut? Vel, for å logge brukeren i, vi bare lagret en verdi i session navn. Så for å logge brukeren ut, må vi rett og slett å fjerne det navnet nøkkelen fra økten array. Så la oss ta en titt på denne siste filen, logout.php. Igjen, vi må ringe session_start () før vi kan gjøre noe session relatert. Nå kan vi bare ringe session_destroy (), som vil ta vare på å kvitte seg med alle data i økten og deretter omdirigere brukeren tilbake til hello.php. Så hvis jeg klikker på Logg ut linken, Vi kan se at serveren har glemt hvem jeg er, og jeg er ikke lenger logget inn Så hva er det som skjer her under panseret? For å få virkemåten vi nettopp så, vår server trenger å gjøre to ting. Først må tjeneren liksom lagre dataene i økten. De ulike PHP-filer som utgjør et nettsted utføres som egne besvergelser av PHP-tolken så lokal variabel kan ikke deles mellom dem. I stedet må serveren til å lagre våre sesjonsdata i noen sted som flere. php-filer kan få tilgang til. For det andre må tjeneren knytte data om din økt med bare min surfeøkt. Når jeg logge inn på Facebook, det er sannsynligvis millioner av andre mennesker også logget inn på Facebook på samme tid. Men serveren trenger noen måte å knytte mine data med min nåværende sesjon og andres data med en annen økt. Heldigvis, forfatterne av PHP tenkt på alt dette for oss, slik at vi ikke trenger å gjennomføre noe av dette selv. Men la oss ta en titt på hva PHP gjør som standard. Når jeg besøker en PHP side som inneholder session_start for første gang, PHP vil generere et stort tilfeldig verdi. Inntil session_destroy kalles-eller jeg vet ikke besøke noen PHP-sider på nettstedet for en stund- som tilfeldig og sannsynligvis unike verdien vil bli assosiert med meg. På den måten serveren har noen måte å identifisere min leseøkt i motsetning til andres. Vi kan ta en titt på dagens session-ID ved hjelp av PHP-funksjonen, session_ID. Her er vi rett og slett gi ut verdien av vår sesjonsidentifikasjon. Så hvis vi igjen login til eksemplet web app, og nå navigere til sessid.php, vi får se dette lang streng av tegn, og det er den nåværende identifikator for min sesjon, og det er hvordan serveren er å holde styr på hvem jeg er. Ok, men vi har bare løst halve problemet. Jada, nå har serveren noen måte å identifisere meg, men når jeg besøker en annen side, må tjeneren gjenbruke det samme identifikator i stedet for å generere en ny. Husk, hvis jeg erklære en lokal variabel i foo.php og deretter besøke bar.php, bar.php har ingen måte å vite hva som skjedde i foo.php. Så standard php session implementering krever at nettleseren minne på serveren som session-ID for å bruke. Dette er implementert i form av en informasjonskapsel. En cookie-i tillegg til å være en deilig snack- er rett og slett en liten tekstfil på datamaskinen at en server kan skrive til via nettleseren. Så etter PHP genererer min unik session ID via session_start, det kommer til å fortelle nettleseren for å lagre som identifikator i en lokal tekstfil, eller en cookie. Deretter nettleseren vil inneholde denne identifikatoren i hver forespørsel at det gjør til serveren. Så egentlig, er det web server ikke huske hvem jeg er. I stedet er den nettleseren bare huske den unike identifikator som ble generert av PHP og deretter stadig minner serveren hva som identifikator er. På den måten, informasjon som brukernavnet mitt er lagret på serveren ikke min nettleser. Nettleseren bare forteller serveren der PHP lagret denne informasjonen så PHP kan hente det. Så det ber spørsmålet, hvor er PHP faktisk lagrer denne informasjonen? Som standard, vil PHP lagre økten data i en fil inne av / tmp, eller 'temp-mappen. Navnet på denne filen vil inneholde økten ID så PHP kan avgjøre hvilken fil for å lese og skrive fra via kun økten ID. OK. Så la oss åpne opp kategorien Nettverk i Chrome debugger via skrunøkkel-ikonet øverst til høyre. Nå la oss dra til hello.php igjen. La oss klikke på HTTP-forespørsel til hello.php og klikk deretter på hoder. Her kan vi se at cookie header inneholder en nøkkel kalt PHPSESSID, eller PHP session ID-med en verdi som er det samme lang streng vi så da vi besøkte sessid.php. Dette er nøyaktig hvordan nettleseren er minner serveren hva session-ID skal brukes. Det er blant annet det i en HTTP-header. OK. La oss dra tilbake til terminalen. La oss gå til / tmp, der PHP lagrer økten informasjon som standard. Sikker nok, innsiden av denne midlertidige mappen, her er en fil som inneholder de samme session-ID. Hvis vi åpner opp denne filen, kan vi se hvordan PHP representerer min økt på disk. Her strengen "Tommy" blir lagret for nøkkelen 'navn,' som er nøyaktig hva vi forventet. Og det er en oversikt over økter i PHP. Hva vi nettopp så var bare standard gjennomføring av øktene. Faktisk, mange nettsteder endre denne standardvirke til å lagre PHP økter mer effektivt i interessen for å forbedre ytelsen. Mitt navn er Tommy, og dette er CS50. [CS50.TV]