[Powered by Google Translate] [Sesiynau PHP] [Tommy MacWilliam, Prifysgol Harvard] [Mae hyn yn CS50.] [CS50.TV] Gall sesiynau yn PHP yn cael ei ddefnyddio i weithredu'r swyddogaeth, fel mewngofnodi defnyddwyr, yn eich app we. Sesiynau PHP yn caniatáu i chi i gysylltu gwybodaeth gyda sesiwn pori gyfan y defnyddiwr yn hytrach na dim ond un dudalen. Felly, mae hynny'n golygu fod y defnyddiwr yn ymweld dudalennau amrywiol PHP sy'n ffurfio eich gwefan, Bydd unrhyw wybodaeth yn y sesiwn yn parhau. Felly mae hynny'n golygu bod data yn y sesiwn gan un dudalen wedyn yn gallu cael mynediad dudalen arall. Storio gwybodaeth mewn sesiwn yn hawdd, ac yr ydym yn gwneud hynny trwy gyfrwng yr arwydd doler, tanlinellu, amrywiol SESIWN cyfalaf. Arwydd doler, tanlinellu, SESIWN-yn union fel arwydd doler, tanlinellu, GAEL ac arwydd doler, tanlinellu, POST- yn amrywiaeth cysylltiadol cynnwys parau gwerth allweddol. Felly, gallwn ddefnyddio cystrawen-fel arwydd doler, tanlinellu, SESIWN, braced, dyfynnwch, foo, dyfynnwch, braced, yn hafal i, dyfynnwch, bar, dyfynnwch- i storio gwerth "bar" yn yr allwedd "foo." Fodd bynnag, cyn y gallwn ysgrifennu neu ddarllen o'r amrywiaeth sesiwn, bydd angen i ni alw swyddogaeth-arbennig sesiwn, tanlinellu, yn dechrau, () - a bydd hyn yn ymgychwyn y sesiwn. Felly, gadewch i ni edrych ar enghraifft. Mae ein tudalen gyntaf, hello.php, yn defnyddio'r sesiwn i allbwn rhywfaint o ddata i'r defnyddiwr. Cofiwch, bydd angen i ni ddefnyddio session_start cyn y gallwn gael gafael ar unrhyw ddata sesiwn. Nawr rydym yn defnyddio ISSET PHP i benderfynu os allweddol yn bodoli yn y $ _SESSION amrywiaeth cysylltiadol. Os yw hynny'n allweddol yn bodoli, sy'n golygu bod y defnyddiwr wedi mewngofnodi i mewn, felly byddwn yn arddangos enw'r defnyddiwr. Os nad yw allwedd wedi ei osod, mae hynny'n golygu nad yw'r defnyddiwr wedi mewngofnodi eto, felly byddwn yn dangos dolen i login.php. Felly, gadewch i ni edrych ar login.php. I lawr yma, mae gennym ffurflen HTML sengl gyda mewnbwn sengl. Priodoledd gweithredu Mae'r ffurflen yw $ _SERVER ['PHP_SELF'], ac mae hyn yn syml yn golygu ein bod am i'r ffurflen gael ei gyflwyno i'r ffeil cyfredol, sydd, yn yr achos hwn, yn login.php. Felly, gadewch i ni fynd yn ôl i'r brig y ffeil. Os yw'r defnyddiwr gyflwyno'r ffurflen, yna $ _POST ['enw'] Rhaid gosod. I gael rhagor o wybodaeth am ffurflenni HTML ac ôl, edrychwch ar y fideo Datblygu'r We PHP. Yn yr achos bod y defnyddiwr oedd cyflwyno'r ffurflen, byddem yn hoffi ysgrifennu y gwerth y maent yn teipio i mewn i mewn i'r sesiwn. Nawr gallwn ailgyfeirio'r defnyddiwr i hello.php. Oherwydd ein bod wedi cael eu storio cyfraniad y defnyddiwr i mewn i'r sesiwn, Bydd hello.php yn gallu cael mynediad at y gwerth a sefydlwyd yn login.php. Felly, gadewch i ni edrych ar hyn mewn porwr gwe. Yn gyntaf, byddwn yn ewch i http://localhost/hello.php. Gallwn weld yma nad ydym wedi mewngofnodi eto, felly gadewch i ni cliciwch ar y ddolen mewngofnodi, a fydd yn ailgyfeirio i ni login.php. Iawn, 'n annhymerus' deipio yn fy enw i, a fydd wedyn yn cael ei storio yn y sesiwn. Great! Nawr gallwn weld fy mewnbwn gan login.php ar hello.php drwy'r sesiwn. Felly, beth am logio y defnyddiwr allan? Wel, er mwyn mewngofnodi i'r defnyddiwr mewn, rydym yn syml storio gwerth i enw sesiwn. Felly, er mwyn logio y defnyddiwr allan, syml, mae angen i ni gael gwared ar yr enw hwnnw allweddol o'r amrywiaeth sesiwn. Felly, gadewch i ni edrych ar y ffeil ddiwethaf, logout.php. Unwaith eto, bydd angen i ni alw session_start () cyn y gallwn wneud unrhyw beth sy'n ymwneud sesiwn. Nawr gallwn ffoniwch session_destroy (), a fydd yn cymryd gofal o gael gwared ar yr holl y data yn y sesiwn ac yna ailgyfeirio'r defnyddiwr yn ôl i'r hello.php. Felly os wyf yn cliciwch ar y ddolen Log allan, gallwn weld bod y gweinydd wedi anghofio pwy ydw i, ac yr wyf bellach yn mewngofnodi Felly, beth sy'n digwydd yma o dan y cwfl? Er mwyn cael yr ymddygiad yr ydym yn jyst yn gweld, Mae angen ein gweinydd i wneud 2 beth. Yn gyntaf, mae angen i'r gweinydd i storio data yn y sesiwn rhywsut. Y gwahanol ffeiliau PHP sy'n cynnwys gwefan yn cael eu gweithredu fel invocations ar wahân o'r cyfieithydd PHP Ni all newidyn mor lleol yn cael ei rannu rhyngddynt. Yn lle hynny, mae angen i'r gweinydd i storio ein data sesiwn mewn rhai lle y gellir lluosog. php ffeiliau gael mynediad. Yn ail, mae angen i'r gweinydd i gysylltu data sesiwn gyda dim ond fy sesiwn pori. Pan fyddaf yn mewngofnodi i Facebook, mae'n debyg fod yna filiynau o bobl eraill sydd wedi mewngofnodi hefyd i Facebook ar yr un pryd. Ond mae angen gweinydd rhyw ffordd o gysylltu fy data gyda fy sesiwn cyfredol a data rhywun arall gyda sesiwn arall. Yn ffodus, mae'r awduron o PHP yn meddwl am hyn oll i ni, felly nid oes angen i ni weithredu unrhyw un o'r hyn ein hunain. Ond gadewch i ni edrych ar yr hyn PHP yn ei wneud yn ddiofyn. Pan fyddaf yn ymweld â dudalen PHP yn cynnwys session_start am y tro cyntaf, Bydd PHP gynhyrchu gwerth ar hap mawr. Hyd nes y galw i neu session_destroy yn Nid wyf yn ymweld ag unrhyw dudalennau PHP ar y safle hwnnw am gyfnod- Bydd gwerth ar hap ac mae'n debyg unigryw fod yn gysylltiedig gyda mi. Fel hyn mae'r gweinydd yn cael rhyw ffordd o adnabod fy sesiwn pori yn hytrach na rhywun arall. Gallwn gymryd edrych ar y ID sesiwn cyfredol ddefnyddio'r swyddogaeth PHP, session_id. Yma rydym yn syml outputting gwerth ein dynodwr sesiwn. Felly, os ydym eto mewngofnodi at yr enghraifft ar y we app, ac yn awr llywio i sessid.php, byddwn yn gweld y llinyn hir o gymeriadau, a dyna'r dynodwr presennol ar gyfer fy sesiwn, a dyna sut y gweinydd yn cadw cofnod o bwy ydw i. Iawn, ond dim ond wedi datrys hanner y broblem. Cadarn, mae gan y gweinydd rhyw ffordd o adnabod i mi, ond pan fyddaf yn ymweld dudalen arall, mae angen i'r gweinydd i ailddefnyddio yr un dynodwr yn hytrach nag creu un newydd. Cofiwch, os wyf yn datgan newidyn lleol mewn foo.php ac yna ewch bar.php, bar.php Nid oes ffordd o wybod hyn a ddigwyddodd yn foo.php. Felly mae'r php diofyn gweithredu sesiwn ei gwneud yn ofynnol bod y porwr atgoffa'r gweinydd pa sesiwn ID i'w ddefnyddio. Mae hyn yn cael ei weithredu ar ffurf cwci. Mae cwci-yn ogystal â bod yn byrbryd blasus- yn unig yw ffeil destun bach ar eich cyfrifiadur y gall gweinyddwr ysgrifennu at trwy'r porwr gwe. Felly, ar ôl PHP yn cynhyrchu fy ID Sesiwn unigryw drwy session_start, mae'n mynd i ddweud wrth y porwr gwe i storio'r dynodwr mewn ffeil destun lleol, neu cwci. Yna bydd y porwr gwe yn cynnwys y dynodwr ym mhob cais ei fod yn gwneud i'r gweinydd. Felly mewn gwirionedd, nid yw'r gweinydd gwe yn cofio pwy ydw. Yn hytrach, y porwr gwe yn syml cofio y dynodwr unigryw a gynhyrchwyd gan PHP ac yna atgoffa'r gweinydd yn gyson beth yw'r dynodwr ydyw. Y ffordd honno, gwybodaeth fel fy enw defnyddiwr yn cael ei storio ar y gweinydd nad yw fy porwr gwe. Mae'r porwr yn syml yn dweud wrth y gweinydd lle PHP storio wybodaeth honno fel y gall PHP adalw. Felly rhaid gofyn y cwestiwn, lle mae PHP mewn gwirionedd yn storio'r wybodaeth hon? Yn ddiofyn, bydd PHP storio eich data sesiwn mewn ffeil tu mewn / tmp, neu ffolder 'dros dro'. Bydd enw'r ffeil yn cynnwys y sesiwn fel y gall ID PHP benderfynu pa ffeil i'w darllen ac ysgrifennu o dim ond drwy sesiwn adnabod. Mae pob hawl. Felly, gadewch i ni agor y tab Rhwydwaith debugger Chrome yn trwy yr eicon wrench ar dde uchaf. Nawr, gadewch i ni pen i hello.php eto. Gadewch i ni glicio ar y cais HTTP i hello.php ac yna cliciwch ar Headers. Yma, gallwn weld bod y pennawd cwci yn cynnwys allwedd o'r enw PHPSESSID, neu sesiwn PHP ID-gyda gwerth hynny yw bod yr un llinyn hir gwelsom pan fyddwn yn ymweld â sessid.php. Mae hyn yn union sut y mae'r porwr yn atgoffa y gweinydd pa ID sesiwn y dylid eu defnyddio. Mae'n ei gynnwys mewn pennawd HTTP. Mae pob hawl. Gadewch i ni fod yn bennaeth yn ôl i'r derfynell. Gadewch i ni fynd i / tmp, lle PHP yn storio'r wybodaeth sesiwn yn ddiofyn. Yn sicr ddigon, y tu mewn y ffolder dros dro, dyma ffeil sy'n cynnwys yr un fath yn union sesiwn adnabod. Os byddwn yn agor y ffeil, gallwn weld sut PHP yn cynrychioli fy sesiwn ar ddisg. Yma y llinyn "Tommy" yn cael ei storio am yr allwedd 'enw,' sef yr union beth yr ydym yn ei ddisgwyl. A dyna trosolwg o sesiynau yn PHP. Yr hyn yr ydym jyst yn gweld dim ond gweithredu diofyn o sesiynau. Yn wir, mae llawer o wefannau newid ymddygiad diofyn hwn i storio sesiynau PHP yn fwy effeithlon er budd o wella perfformiad. Fy enw i yw Tommy, ac mae hyn yn CS50. [CS50.TV]