[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [Tas ir CS50.] [CS50.TV] Sesijas PHP var izmantot, lai īstenotu funkcionalitāti, piemēram, lietotāja autorizācijas, jūsu web app. PHP sesijas ļauj saistīt informāciju ar lietotāja visu pārlūkošanas sesijas nevis vienkārši vienas lapas. Tātad tas nozīmē, jo lietotājs apmeklē dažādus PHP lapas, kas padara jūsu mājas lapā, jebkura informācija sesijā turpināsies. Tātad tas nozīmē, ka dati, ko glabā sesijā par vienu lapu vēlāk var piekļūt citu lapu. Uzglabāt informāciju sesijā ir viegli, un mēs to darām ar dolāra zīmi, uzsvērt, kapitāla sesijas mainīgo. Dolāra zīmi, uzsvērt, sesija, tāpat kā dolāra zīmi, uzsvērt, GET un dolāra zīmi, uzsvērt, POST- ir asociatīvā masīva veido galveno vērtību pārus. Tātad, mēs varam izmantot sintakse līdzīgu dolāra zīmi, uzsvērt, sesija, bracket, citēju, foo, citēju, bracket, vienlīdzības, citēju, bārs, citēju- lai saglabātu vērtību "bar" atslēgas "foo". Tomēr, pirms mēs varam rakstīt vai lasīt no sesijas masīva, mums būs nepieciešams, lai izsauktu īpašu funkciju- sesija, uzsvērt, sāciet () - un tas sāktu sesiju. Tātad, pieņemsim to apskatīt piemērs. Mūsu pirmās lapas, hello.php, izmanto sesijas produkciju dažus datus lietotājam. Atcerieties, ka mums būs nepieciešams, lai izmantotu session_start, pirms mēs varam piekļūt visiem sesijas datus. Tagad mēs esam izmantojot PHP isset lai noteiktu, vai galvenais eksistē ar $ _SESSION asociatīvā masīva. Ja šis taustiņš nav, tas nozīmē, ka lietotājs ir pieteicies, tāpēc mēs parādīsim lietotāja vārdu. Ja šis taustiņš nav noteikts, tas nozīmē, ka lietotājs nav pieteicies vēl, tāpēc mēs parādīsim saiti uz login.php. Tātad, pieņemsim to apskatīt login.php. Šeit lejā, mums ir vienota HTML formu ar vienu ieejas. Veidlapā rīcība atribūts ir $ _SERVER ['PHP_SELF'] un tas vienkārši nozīmē, ka mēs gribam veidlapa jāiesniedz pašreizējo failu, , kas šajā gadījumā ir login.php. Tāpēc iesim atpakaļ uz augšu šo failu. Ja lietotājs iesniedz veidlapu, tad $ _POST ['name'] ir jānosaka. Plašāku informāciju par HTML formas un pastu, izbraukšana PHP Web Development video. Gadījumā, ja lietotājs did sniegt formu, mēs gribētu rakstīt vērtību, ka tie drukāti uz sesiju. Tagad mēs varam novirzīt lietotājam hello.php. Jo mēs esam saglabāti lietotāja ievadīti sesijā, hello.php varēs piekļūt vērtību, kas bija noteikta ar login.php. Tāpēc pieņemsim pārbaudīt šo out ar interneta pārlūku. Pirmkārt, mēs virzītos uz http://localhost/hello.php. Mēs varam redzēt, ka mēs esam nav pieteicies vēl, tāpēc pieņemsim noklikšķiniet uz pieteikšanās saites, kas būs novirzīt mūs login.php. Labi, es ņemšu rakstīt manu vārdu, kas tiks saglabāti sesijā. Lieliski! Tagad mēs varam redzēt savu ieguldījumu no login.php par hello.php caur sesiju. Tātad, ko par kokmateriālu lietotājs ārā? Nu, lai pieteiktos lietotājs, mēs vienkārši uzglabāt vērtību uz sesijas nosaukumu. Tātad, lai pieteiktos lietotājs, mums vienkārši ir nepieciešams, lai novērstu šo nosaukumu atslēgu no sesijas masīva. Tātad, pieņemsim to apskatīt šo pēdējo failu, logout.php. Atkal, mums būs nepieciešams, lai izsauktu session_start () pirms mēs varam darīt neko sesiju saistīto. Tagad mēs varam vienkārši zvanīt session_destroy () kas parūpēsies, lai atbrīvotos no visiem datiem sesijas un pēc tam novirzīt lietotājam atpakaļ hello.php. Tātad, ja es noklikšķiniet uz Iziet saiti, mēs varam redzēt, ka serveris ir aizmirsuši, kas es esmu, un es vairs ienācis Tātad, kas notiek šeit, zem pārsega? Lai iegūtu mēs tikai redzēja uzvedību, Mūsu serveris ir jādara 2 lietas. Pirmkārt, serveris ir kaut kā uzglabāt datus sesijā. Dažādie PHP faili, kas ietver mājas lapā tiek noformēti kā atsevišķi invocations par PHP tulks lai vietējā mainīgo nevar sadalīt starp tām. Tā vietā, serveris nepieciešams, lai saglabātu mūsu sesijas datus kādā vietā, kas vairākus. php failus var piekļūt. Otrkārt, serveris ir saistīt sesijas datus tikai ar manu pārlūkošanas sesijas. Kad es piesakieties Facebook, ir iespējams, miljoniem citiem cilvēkiem arī pieteicies Facebook, tajā pašā laikā. Bet serveris ir kaut kādā veidā iesaistīt savus datus ar manu pašreizējo sesiju un kāds cits datus ar citu sesiju. Par laimi, autori PHP domāja par to visu mums, tāpēc mums nav nepieciešams, lai īstenotu kādu no šo sevi. Bet pieņemsim apskatīt to, ko PHP dara pēc noklusējuma. Kad es apmeklēju PHP lapu ar session_start pirmo reizi, PHP radīs lielu izlases vērtību. Līdz session_destroy sauc vai man nav apmeklēt jebkuru PHP lapām šajā vietā, bet, ka izlases un, iespējams, unikāla vērtība būs saistīts ar mani. Tādā veidā serveris ir kaut kādā veidā identificēt manu pārlūkošanas sesiju nevis kāds cits. Mēs varam apskatīt pašreizējās sesijas ID izmantojot PHP funkciju, session_id. Šeit mēs vienkārši outputting vērtību mūsu sesijas identifikatoru. Tātad, ja mēs atkal pieteiktos piemēram, web app, un tagad virzītos uz sessid.php, mēs redzam šo ilgi rakstzīmju virkne, un tas ir pašreizējā identifikators manu sesiju un tas, kā serveris ir sekot, kas es esmu. Labi, bet mēs esam tikai atrisināt pusi problēmu. Protams, serveris tagad ir kaut kādā veidā identificēt mani, bet, kad es apmeklēt citu lapu, serveris ir atkārtoti to pašu identifikatoru nevis radot jaunu. Atcerieties, ja es apliecinu vietējo mainīgais foo.php un tad apmeklējiet bar.php, bar.php ir nekādi nevar zināt, kas notika foo.php. Tāpēc noklusējuma php sesija īstenošana paredz, ka pārlūks atgādināt serveri kas sesijas ID, lai izmantotu. Tas tiek īstenots formā cookie. Cookie, papildus tam, ka garšīgi uzkodu ir tikai neliels teksta fails datorā ka serveris var rakstīt, izmantojot interneta pārlūku. Lai pēc PHP ģenerē savu unikālo sesijas identifikatoru izmantojot session_start, tas notiek, lai pastāstītu interneta pārlūku, lai saglabātu šo identifikatoru vietējā teksta failu, vai cookie. Tad interneta pārlūkprogramma iekļauj šo identifikatoru katru pieprasījumu ka tas padara uz serveri. Tik tiešām, web serveris nav atcerēties, kas es esmu. Tā vietā, interneta pārlūks ir vienkārši atcerēties unikālais identifikators , kas tika radīts, PHP, un pēc tam pastāvīgi atgādinot serveri kas tas identifikators ir. Tādā veidā, informācija, piemēram, mans lietotāja vārds tiek glabāti uz servera, nevis mana interneta pārlūku. Pārlūks vienkārši stāsta serveri, kur PHP glabājas šo informāciju tāpēc PHP var iegūt to. Tā, ka Rodas jautājums, kur PHP faktiski saglabājot šo informāciju? Pēc noklusējuma, PHP saglabās jūsu sesijas datus failā iekšpusē / tmp, vai "temp" mapē. Šī faila nosaukums tiks iekļauts sesijas ID, lai PHP var noteikt kas failu lasīt un rakstīt no izmantojot tikai sesijas ID. Labi. Tāpēc pieņemsim atvērtu cilni Network in Chrome atkļūdotājs ar uzgriežņu atslēgas ikonas pie augšējā labajā stūrī. Tagad dodies uz hello.php vēlreiz. Pieņemsim noklikšķiniet uz HTTP pieprasījumu hello.php un pēc tam noklikšķiniet uz galvenes. Šeit mēs varam redzēt, ka cookie galvenē ir atslēgu sauc PHPSESSID, vai PHP sesijas ID, ar vērtību, kas ir tas pats garš virkne mēs redzējām kad mēs apmeklējām sessid.php. Tas ir tieši tā, kā pārlūkprogramma atgādinot serveri, kas sesijas ID jāizmanto. Tas ir ieskaitot to HTTP galvenes. Labi. Pieņemsim dodies atpakaļ uz terminālu. Pieņemsim virzītos uz / tmp, kur PHP ir uzglabāt informāciju sesijas pēc noklusējuma. Un tik tiešām, iekšpuse no šā pagaidu mapes, šeit ir fails, kas satur to pašu precīzu sesijas ID. Ja mēs atvērtu šo failu, mēs varam redzēt, kā PHP pārstāv manu sesiju uz diska. Šeit string "Tommy" tiek uzglabāta galveno "nosaukumu," kas ir tieši tas, ko mēs gaidījām. Un tas ir pārskats par sesijām PHP. Ko mēs tikko redzējām, bija tikai noklusējuma īstenošanu sesiju. Patiesībā, daudzi tīmekļa vietnes mainītu šo noklusēto uzvedību uzglabāt PHP sesijas efektīvāk interesēs uzlabotu sniegumu. Mans vārds ir Tommy, un tas ir CS50. [CS50.TV]