1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [PHP sessies] 2 00:00:02,000 --> 00:00:04,000 [Tommy MacWilliam, Harvard Universiteit] 3 00:00:04,000 --> 00:00:07,000 [Hierdie is CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,920 Sessies in PHP kan gebruik word om funksies uit te voer, 5 00:00:10,920 --> 00:00:13,440 soos logins, in jou web app. 6 00:00:13,440 --> 00:00:16,920 PHP sessies toelaat om inligting te assosieer 7 00:00:16,920 --> 00:00:19,680 met die gebruiker se hele blaai sessie 8 00:00:19,680 --> 00:00:22,290 eerder as om net 'n enkele bladsy. 9 00:00:22,290 --> 00:00:27,330 So dit beteken dat as die gebruiker verskeie PHP bladsye wat maak jou webwerf besoek, 10 00:00:27,330 --> 00:00:30,630 enige inligting in die sessie sal voortduur. 11 00:00:30,630 --> 00:00:34,770 So dit beteken dat data wat gestoor word in die sessie een bladsy 12 00:00:34,770 --> 00:00:37,580 kan later verkry word deur 'n ander bladsy. 13 00:00:37,580 --> 00:00:40,080 Berging van inligting in 'n sessie is maklik, 14 00:00:40,080 --> 00:00:48,790 en ons doen dit via die dollar teken, onderstreep, kapitaal SESSIE veranderlike. 15 00:00:48,790 --> 00:00:52,620 Dollar-teken, onderstreep, Sessie-net soos dollar teken, onderstreep, KRY 16 00:00:52,620 --> 00:00:54,710 en dollar-teken, onderstreep, NA- 17 00:00:54,710 --> 00:00:58,690 is 'n assosiatiewe skikking bestaan ​​uit sleutel waarde pare. 18 00:00:58,690 --> 00:01:07,980 So ons kan gebruik sintaksis-agtige dollar teken, onderstreep, Sessie, 19 00:01:07,980 --> 00:01:16,000 bracket, kwotasie, cat, haal, bracket, gelykes, kwotasie, bar, kwotasie- 20 00:01:16,000 --> 00:01:20,440 die waarde "bar" te stoor in die sleutel "cat." 21 00:01:20,440 --> 00:01:24,030 Maar, voordat ons kan skryf of lees van die sessie skikking, 22 00:01:24,030 --> 00:01:26,770 ons sal moet 'n spesiale funksie-bel 23 00:01:26,770 --> 00:01:34,690 sessie, onderstreep, begin, () - 24 00:01:34,690 --> 00:01:37,060 en dit sal die sessie inisialiseer. 25 00:01:37,060 --> 00:01:39,850 So kom ons neem 'n blik op 'n voorbeeld. 26 00:01:39,850 --> 00:01:46,570 Ons eerste bladsy, hello.php, maak gebruik van die sessie te uitset sommige data aan die gebruiker. 27 00:01:46,570 --> 00:01:53,920 Onthou, ons sal moet session_start te gebruik voordat ons enige sessie data kan toegang te verkry. 28 00:01:53,920 --> 00:01:59,010 Nou kan ons met behulp van PHP se isset om te bepaal of 'n sleutel bestaan 29 00:01:59,010 --> 00:02:03,230 in die $ _SESSION assosiatiewe skikking. 30 00:02:03,230 --> 00:02:07,250 As dit die sleutel bestaan, wat beteken dat die gebruiker aangemeld is, 31 00:02:07,250 --> 00:02:10,410 so ons sal die gebruiker se naam vertoon. 32 00:02:10,410 --> 00:02:14,110 As dit die sleutel is nie gestel nie, wat beteken dat die gebruiker is nie aangemeld het nie, 33 00:02:14,110 --> 00:02:17,880 so ons sal 'n skakel na login.php vertoon. 34 00:02:17,880 --> 00:02:21,380 So kom ons neem 'n blik op login.php. 35 00:02:21,380 --> 00:02:26,260 Hier het ons 'n enkele HTML-vorm met 'n enkele insette. 36 00:02:26,260 --> 00:02:32,720 Die vorm se optrede kenmerk is $ _SERVER ['PHP_SELF'], 37 00:02:32,720 --> 00:02:37,440 en dit beteken eenvoudig dat ons die vorm aan die huidige lêer ingedien word, 38 00:02:37,440 --> 00:02:41,040 wat, in hierdie geval, is login.php. 39 00:02:41,040 --> 00:02:43,010 So laat ons terug na die top van hierdie lêer gaan nie. 40 00:02:43,010 --> 00:02:50,100 As die gebruiker die vorm ingedien word, dan $ _POST ['name'] gestel moet word. 41 00:02:50,100 --> 00:02:53,750 Vir meer inligting oor HTML vorms en post, 42 00:02:53,750 --> 00:02:56,510 check die PHP Web Development video. 43 00:02:56,510 --> 00:02:59,330 In die geval dat die gebruiker het die vorm indien, 44 00:02:59,330 --> 00:03:03,970 Ons wil graag die waarde wat hulle getik in na die sessie te skryf. 45 00:03:03,970 --> 00:03:08,540 Nou kan ons die gebruiker hello.php lei. 46 00:03:08,540 --> 00:03:11,800 Want ons het die gebruiker se insette gestoor in die sessie, 47 00:03:11,800 --> 00:03:18,240 hello.php sal in staat wees om die waarde wat gestig is in login.php om toegang te verkry. 48 00:03:18,240 --> 00:03:21,010 So laat check dit uit in 'n webblaaier. 49 00:03:21,010 --> 00:03:27,520 Eerstens, sal ons gaan na http://localhost/hello.php. 50 00:03:27,520 --> 00:03:30,220 Ons kan hier sien dat ons nie in geteken nie, 51 00:03:30,220 --> 00:03:35,040 so laat op die login skakel, wat sal lei om ons te login.php. 52 00:03:35,040 --> 00:03:41,760 Goed, ek sal my naam intik, wat dan in die sessie gestoor word. 53 00:03:41,760 --> 00:03:48,950 Groot! Nou kan ons my insette sien login.php op hello.php via die sessie. 54 00:03:48,950 --> 00:03:52,270 So, wat oor die aanteken van die gebruiker uit? 55 00:03:52,270 --> 00:03:58,510 Wel, ten einde die gebruiker in te teken, is ons eenvoudig gestoor 'n waarde in die sessie naam. 56 00:03:58,510 --> 00:04:03,040 Sodat die gebruiker om uit te teken, ons moet net daardie naam sleutel te verwyder 57 00:04:03,040 --> 00:04:05,040 van die sessie skikking. 58 00:04:05,040 --> 00:04:09,130 So laat ons 'n blik op hierdie laaste lêer, logout.php. 59 00:04:09,130 --> 00:04:12,080 Weer, moet ons session_start te roep () 60 00:04:12,080 --> 00:04:15,260 voordat ons kan enigiets sessie verwant doen. 61 00:04:15,260 --> 00:04:19,240 Nou kan ons net noem session_destroy (), 62 00:04:19,240 --> 00:04:22,460 wat sal sorg om ontslae te raak van al die data in die sessie 63 00:04:22,460 --> 00:04:26,790 en dan lei die gebruiker terug na hello.php. 64 00:04:26,790 --> 00:04:30,700 So as ek op die Meld uit skakel, 65 00:04:30,700 --> 00:04:34,690 Ons kan sien dat die bediener het vergeet wie ek is, 66 00:04:34,690 --> 00:04:36,970 En Ek is nie meer in geteken 67 00:04:36,970 --> 00:04:39,910 So, wat gaan hier aan onder die enjinkap? 68 00:04:39,910 --> 00:04:42,250 Ten einde die gedrag wat ons nou net gesien te kry, 69 00:04:42,250 --> 00:04:44,760 ons bediener moet 2 dinge te doen. 70 00:04:44,760 --> 00:04:48,980 Eerstens, die bediener moet een of ander manier die stoor van die data in die sessie. 71 00:04:48,980 --> 00:04:51,910 Die verskillende PHP lêers wat bestaan ​​uit 'n webwerf 72 00:04:51,910 --> 00:04:56,500 uitgevoer word as afsonderlike invocations van die PHP tolk 73 00:04:56,500 --> 00:05:00,550 sodat plaaslike veranderlike kan nie gedeel word tussen hulle. 74 00:05:00,550 --> 00:05:04,030 In plaas daarvan, die bediener moet ons sessie data te stoor 75 00:05:04,030 --> 00:05:08,440 in 'n plek wat veelvuldige. PHP lêers kan toegang te verkry. 76 00:05:08,440 --> 00:05:13,940 Tweedens, die bediener moet die sessie data te assosieer met net my blaai sessie. 77 00:05:13,940 --> 00:05:15,940 Toe ek aanmeld om Facebook, 78 00:05:15,940 --> 00:05:20,460 daar is waarskynlik miljoene ander mense ook aangeteken in Facebook op dieselfde tyd. 79 00:05:20,460 --> 00:05:24,200 Maar die bediener moet 'n paar wyse van assosiasie my data 80 00:05:24,200 --> 00:05:28,340 met my huidige sessie en iemand anders se data met 'n ander sessie. 81 00:05:28,340 --> 00:05:32,380 Gelukkig is die skrywers van PHP gedink oor al hierdie dinge vir ons, 82 00:05:32,380 --> 00:05:35,170 sodat ons nie nodig het om enige van hierdie onsself te implementeer. 83 00:05:35,170 --> 00:05:39,540 Maar laat ons neem 'n blik op wat PHP doen by verstek. 84 00:05:39,540 --> 00:05:44,070 Toe ek na 'n PHP bladsy met session_start vir die eerste keer, 85 00:05:44,070 --> 00:05:47,930 PHP sal 'n groot ewekansige waarde genereer. 86 00:05:47,930 --> 00:05:53,970 Tot session_destroy genoem word-of ek nie enige PHP bladsye op die webwerf besoek nie vir 'n rukkie- 87 00:05:53,970 --> 00:05:59,050 wat lukraak en waarskynlik uniek waarde sal wees wat verband hou met my. 88 00:05:59,050 --> 00:06:02,780 So is die bediener het 'n manier van die identifisering van my blaai sessie 89 00:06:02,780 --> 00:06:05,710 in teenstelling met iemand anders se. 90 00:06:05,710 --> 00:06:08,780 Ons kan 'n blik op die huidige sessie ID neem 91 00:06:08,780 --> 00:06:12,380 gebruik van die PHP funksie, session_ID. 92 00:06:12,380 --> 00:06:17,250 Hier is ons eenvoudig uitdruk die waarde van ons sessie identifiseerder. 93 00:06:17,250 --> 00:06:20,580 So as ons weer aan te meld by die voorbeeld web artikels, 94 00:06:20,580 --> 00:06:25,530 En nou gaan na sessid.php, 95 00:06:25,530 --> 00:06:27,850 Ons sal hierdie lang string van die karakters te sien, 96 00:06:27,850 --> 00:06:31,180 en dit is die huidige naam vir my sessie, 97 00:06:31,180 --> 00:06:35,410 en dit is hoe die bediener hou van wie ek is. 98 00:06:35,410 --> 00:06:37,670 Goed, maar ons het net die helfte van die probleem opgelos. 99 00:06:37,670 --> 00:06:40,910 Seker, die bediener is nou 'n manier om my te identifiseer, 100 00:06:40,910 --> 00:06:46,060 maar toe ek besoek 'n ander bladsy, die bediener moet dieselfde identifikasie te onthou 101 00:06:46,060 --> 00:06:48,910 eerder as die opwekking van 'n nuwe een. 102 00:06:48,910 --> 00:06:52,760 Onthou, as ek verklaar 'n plaaslike veranderlike in foo.php 103 00:06:52,760 --> 00:06:55,190 en dan besoek bar.php, 104 00:06:55,190 --> 00:07:00,980 bar.php het geen manier om te weet wat gebeur het in foo.php. 105 00:07:00,980 --> 00:07:07,450 So het die verstek PHP sessie implementering vereis dat die leser herinner die bediener 106 00:07:07,450 --> 00:07:09,740 watter sessie ID te gebruik. 107 00:07:09,740 --> 00:07:12,710 Dit is geïmplementeer in die vorm van 'n koekie. 108 00:07:12,710 --> 00:07:15,370 'N koekie-in Benewens die feit dat 'n heerlike snack- 109 00:07:15,370 --> 00:07:18,630 is net 'n klein teks lêer op jou rekenaar 110 00:07:18,630 --> 00:07:21,780 dat 'n bediener te kan skryf via die web browser. 111 00:07:21,780 --> 00:07:27,300 So na PHP genereer my unieke sessie ID via session_start, 112 00:07:27,300 --> 00:07:34,210 Dit gaan die webblaaier te vertel dat identifikasie in 'n plaaslike teks lêer, of 'n koekie te stoor. 113 00:07:34,210 --> 00:07:38,490 Dan word die webblaaier wat identifikasie sluit in elke versoek 114 00:07:38,490 --> 00:07:40,780 dat dit aan die bediener. 115 00:07:40,780 --> 00:07:44,280 So regtig, die web bediener is nie onthou wie ek is. 116 00:07:44,280 --> 00:07:48,780 In plaas daarvan, die web leser is eenvoudig die herdenking van die unieke identifikasie 117 00:07:48,780 --> 00:07:52,730 dat is gegenereer deur PHP en dan voortdurend herinner aan die bediener 118 00:07:52,730 --> 00:07:55,120 wat dit identifiseerder is. 119 00:07:55,120 --> 00:08:00,760 Op dié manier, inligting soos my gebruiker naam gestoor word op die bediener nie my web browser. 120 00:08:00,760 --> 00:08:05,190 Die leser sê doodeenvoudig vir die bediener waar PHP gestoor dat die inligting 121 00:08:05,190 --> 00:08:07,750 so PHP kan dit kry. 122 00:08:07,750 --> 00:08:12,150 Sodat lei tot die vraag, waar is PHP eintlik stoor hierdie inligting? 123 00:08:12,150 --> 00:08:14,910 By verstek, sal PHP jou sessie data stoor 124 00:08:14,910 --> 00:08:19,540 in 'n lêer binnekant van / tmp, of die 'tydelike 'n gids. 125 00:08:19,540 --> 00:08:24,450 Die naam van die lêer sal die sessie ID sluit so PHP kan bepaal 126 00:08:24,450 --> 00:08:28,620 watter lêer om te lees en skryf van via slegs die sessie ID. 127 00:08:28,620 --> 00:08:32,280 Alle regte. So laat ons oop te maak die blad Network in Chrome se debugger 128 00:08:32,280 --> 00:08:34,890 via die sleutel ikoon regs bo. 129 00:08:34,890 --> 00:08:38,409 Nou laat se kop weer hello.php. 130 00:08:38,409 --> 00:08:42,270 Kom ons kliek op die HTTP-versoek aan hello.php 131 00:08:42,270 --> 00:08:44,680 en klik op Headers. 132 00:08:44,680 --> 00:08:50,390 Hier kan ons sien dat die koekie kop bevat 'n sleutel genoem PHPSESSID, 133 00:08:50,390 --> 00:08:55,980 of PHP sessie ID-met 'n waarde wat dieselfde lang string ons gesien 134 00:08:55,980 --> 00:08:59,290 wanneer ons besoek sessid.php. 135 00:08:59,290 --> 00:09:04,660 Dit is presies hoe die leser herinner aan die bediener wat sessie ID gebruik moet word. 136 00:09:04,660 --> 00:09:08,180 Dit is insluitend dit in 'n HTTP kop. 137 00:09:08,180 --> 00:09:10,500 Alle regte. Kom ons kop terug na die terminale. 138 00:09:10,500 --> 00:09:16,450 Kom ons gaan na / tmp, waar PHP is die stoor van die sessie-inligting is by verstek. 139 00:09:16,450 --> 00:09:19,160 Seker genoeg, binnekant van die tydelike gids, 140 00:09:19,160 --> 00:09:23,550 hier is 'n lêer wat presies dieselfde sessie ID bevat. 141 00:09:23,550 --> 00:09:28,990 As ons oopmaak hierdie lêer, kan ons sien hoe PHP is wat my sessie op die skyf. 142 00:09:28,990 --> 00:09:32,870 Hier is die string "Tommy" gestoor word vir die sleutel 'naam, " 143 00:09:32,870 --> 00:09:35,750 dit is presies wat ons verwag het. 144 00:09:35,750 --> 00:09:38,850 En dit is 'n oorsig van sessies in PHP. 145 00:09:38,850 --> 00:09:42,590 Wat ons nou net gesien het, was net die standaard implementering van sessies. 146 00:09:42,590 --> 00:09:45,600 Trouens, baie webtuistes verander hierdie verstek gedrag 147 00:09:45,600 --> 00:09:48,280 PHP sessies om meer doeltreffend te stoor 148 00:09:48,280 --> 00:09:50,390 in die belang van die verbetering van prestasie. 149 00:09:50,390 --> 00:09:52,800 My naam is Tommy, en dit is CS50. 150 00:09:52,800 --> 00:09:56,000 [CS50.TV]