[Powered by Google Translate] [PHP sessies] [Tommy MacWilliam, Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] Sessies in PHP kan gebruik word om funksies uit te voer, soos logins, in jou web app. PHP sessies toelaat om inligting te assosieer met die gebruiker se hele blaai sessie eerder as om net 'n enkele bladsy. So dit beteken dat as die gebruiker verskeie PHP bladsye wat maak jou webwerf besoek, enige inligting in die sessie sal voortduur. So dit beteken dat data wat gestoor word in die sessie een bladsy kan later verkry word deur 'n ander bladsy. Berging van inligting in 'n sessie is maklik, en ons doen dit via die dollar teken, onderstreep, kapitaal SESSIE veranderlike. Dollar-teken, onderstreep, Sessie-net soos dollar teken, onderstreep, KRY en dollar-teken, onderstreep, NA- is 'n assosiatiewe skikking bestaan ​​uit sleutel waarde pare. So ons kan gebruik sintaksis-agtige dollar teken, onderstreep, Sessie, bracket, kwotasie, cat, haal, bracket, gelykes, kwotasie, bar, kwotasie- die waarde "bar" te stoor in die sleutel "cat." Maar, voordat ons kan skryf of lees van die sessie skikking, ons sal moet 'n spesiale funksie-bel sessie, onderstreep, begin, () - en dit sal die sessie inisialiseer. So kom ons neem 'n blik op 'n voorbeeld. Ons eerste bladsy, hello.php, maak gebruik van die sessie te uitset sommige data aan die gebruiker. Onthou, ons sal moet session_start te gebruik voordat ons enige sessie data kan toegang te verkry. Nou kan ons met behulp van PHP se isset om te bepaal of 'n sleutel bestaan in die $ _SESSION assosiatiewe skikking. As dit die sleutel bestaan, wat beteken dat die gebruiker aangemeld is, so ons sal die gebruiker se naam vertoon. As dit die sleutel is nie gestel nie, wat beteken dat die gebruiker is nie aangemeld het nie, so ons sal 'n skakel na login.php vertoon. So kom ons neem 'n blik op login.php. Hier het ons 'n enkele HTML-vorm met 'n enkele insette. Die vorm se optrede kenmerk is $ _SERVER ['PHP_SELF'], en dit beteken eenvoudig dat ons die vorm aan die huidige lêer ingedien word, wat, in hierdie geval, is login.php. So laat ons terug na die top van hierdie lêer gaan nie. As die gebruiker die vorm ingedien word, dan $ _POST ['name'] gestel moet word. Vir meer inligting oor HTML vorms en post, check die PHP Web Development video. In die geval dat die gebruiker het die vorm indien, Ons wil graag die waarde wat hulle getik in na die sessie te skryf. Nou kan ons die gebruiker hello.php lei. Want ons het die gebruiker se insette gestoor in die sessie, hello.php sal in staat wees om die waarde wat gestig is in login.php om toegang te verkry. So laat check dit uit in 'n webblaaier. Eerstens, sal ons gaan na http://localhost/hello.php. Ons kan hier sien dat ons nie in geteken nie, so laat op die login skakel, wat sal lei om ons te login.php. Goed, ek sal my naam intik, wat dan in die sessie gestoor word. Groot! Nou kan ons my insette sien login.php op hello.php via die sessie. So, wat oor die aanteken van die gebruiker uit? Wel, ten einde die gebruiker in te teken, is ons eenvoudig gestoor 'n waarde in die sessie naam. Sodat die gebruiker om uit te teken, ons moet net daardie naam sleutel te verwyder van die sessie skikking. So laat ons 'n blik op hierdie laaste lêer, logout.php. Weer, moet ons session_start te roep () voordat ons kan enigiets sessie verwant doen. Nou kan ons net noem session_destroy (), wat sal sorg om ontslae te raak van al die data in die sessie en dan lei die gebruiker terug na hello.php. So as ek op die Meld uit skakel, Ons kan sien dat die bediener het vergeet wie ek is, En Ek is nie meer in geteken So, wat gaan hier aan onder die enjinkap? Ten einde die gedrag wat ons nou net gesien te kry, ons bediener moet 2 dinge te doen. Eerstens, die bediener moet een of ander manier die stoor van die data in die sessie. Die verskillende PHP lêers wat bestaan ​​uit 'n webwerf uitgevoer word as afsonderlike invocations van die PHP tolk sodat plaaslike veranderlike kan nie gedeel word tussen hulle. In plaas daarvan, die bediener moet ons sessie data te stoor in 'n plek wat veelvuldige. PHP lêers kan toegang te verkry. Tweedens, die bediener moet die sessie data te assosieer met net my blaai sessie. Toe ek aanmeld om Facebook, daar is waarskynlik miljoene ander mense ook aangeteken in Facebook op dieselfde tyd. Maar die bediener moet 'n paar wyse van assosiasie my data met my huidige sessie en iemand anders se data met 'n ander sessie. Gelukkig is die skrywers van PHP gedink oor al hierdie dinge vir ons, sodat ons nie nodig het om enige van hierdie onsself te implementeer. Maar laat ons neem 'n blik op wat PHP doen by verstek. Toe ek na 'n PHP bladsy met session_start vir die eerste keer, PHP sal 'n groot ewekansige waarde genereer. Tot session_destroy genoem word-of ek nie enige PHP bladsye op die webwerf besoek nie vir 'n rukkie- wat lukraak en waarskynlik uniek waarde sal wees wat verband hou met my. So is die bediener het 'n manier van die identifisering van my blaai sessie in teenstelling met iemand anders se. Ons kan 'n blik op die huidige sessie ID neem gebruik van die PHP funksie, session_ID. Hier is ons eenvoudig uitdruk die waarde van ons sessie identifiseerder. So as ons weer aan te meld by die voorbeeld web artikels, En nou gaan na sessid.php, Ons sal hierdie lang string van die karakters te sien, en dit is die huidige naam vir my sessie, en dit is hoe die bediener hou van wie ek is. Goed, maar ons het net die helfte van die probleem opgelos. Seker, die bediener is nou 'n manier om my te identifiseer, maar toe ek besoek 'n ander bladsy, die bediener moet dieselfde identifikasie te onthou eerder as die opwekking van 'n nuwe een. Onthou, as ek verklaar 'n plaaslike veranderlike in foo.php en dan besoek bar.php, bar.php het geen manier om te weet wat gebeur het in foo.php. So het die verstek PHP sessie implementering vereis dat die leser herinner die bediener watter sessie ID te gebruik. Dit is geïmplementeer in die vorm van 'n koekie. 'N koekie-in Benewens die feit dat 'n heerlike snack- is net 'n klein teks lêer op jou rekenaar dat 'n bediener te kan skryf via die web browser. So na PHP genereer my unieke sessie ID via session_start, Dit gaan die webblaaier te vertel dat identifikasie in 'n plaaslike teks lêer, of 'n koekie te stoor. Dan word die webblaaier wat identifikasie sluit in elke versoek dat dit aan die bediener. So regtig, die web bediener is nie onthou wie ek is. In plaas daarvan, die web leser is eenvoudig die herdenking van die unieke identifikasie dat is gegenereer deur PHP en dan voortdurend herinner aan die bediener wat dit identifiseerder is. Op dié manier, inligting soos my gebruiker naam gestoor word op die bediener nie my web browser. Die leser sê doodeenvoudig vir die bediener waar PHP gestoor dat die inligting so PHP kan dit kry. Sodat lei tot die vraag, waar is PHP eintlik stoor hierdie inligting? By verstek, sal PHP jou sessie data stoor in 'n lêer binnekant van / tmp, of die 'tydelike 'n gids. Die naam van die lêer sal die sessie ID sluit so PHP kan bepaal watter lêer om te lees en skryf van via slegs die sessie ID. Alle regte. So laat ons oop te maak die blad Network in Chrome se debugger via die sleutel ikoon regs bo. Nou laat se kop weer hello.php. Kom ons kliek op die HTTP-versoek aan hello.php en klik op Headers. Hier kan ons sien dat die koekie kop bevat 'n sleutel genoem PHPSESSID, of PHP sessie ID-met 'n waarde wat dieselfde lang string ons gesien wanneer ons besoek sessid.php. Dit is presies hoe die leser herinner aan die bediener wat sessie ID gebruik moet word. Dit is insluitend dit in 'n HTTP kop. Alle regte. Kom ons kop terug na die terminale. Kom ons gaan na / tmp, waar PHP is die stoor van die sessie-inligting is by verstek. Seker genoeg, binnekant van die tydelike gids, hier is 'n lêer wat presies dieselfde sessie ID bevat. As ons oopmaak hierdie lêer, kan ons sien hoe PHP is wat my sessie op die skyf. Hier is die string "Tommy" gestoor word vir die sleutel 'naam, " dit is presies wat ons verwag het. En dit is 'n oorsig van sessies in PHP. Wat ons nou net gesien het, was net die standaard implementering van sessies. Trouens, baie webtuistes verander hierdie verstek gedrag PHP sessies om meer doeltreffend te stoor in die belang van die verbetering van prestasie. My naam is Tommy, en dit is CS50. [CS50.TV]