1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [PHP Sessions] 2 00:00:02,000 --> 00:00:04,000 [Tommy MacWilliam, Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Това е CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,920 Сесии в PHP могат да бъдат използвани за изпълнение на функционалност, 5 00:00:10,920 --> 00:00:13,440 като потребителските данни за вход в уеб приложението. 6 00:00:13,440 --> 00:00:16,920 PHP сесии, които ви позволяват да се сдружават информация 7 00:00:16,920 --> 00:00:19,680 с цялата сесия на браузъра на потребителя 8 00:00:19,680 --> 00:00:22,290 а не просто една страница. 9 00:00:22,290 --> 00:00:27,330 Така че това означава, че като потребител посещава различни PHP страници, които правят вашия уеб сайт, 10 00:00:27,330 --> 00:00:30,630 всякаква информация в сесията ще се запази. 11 00:00:30,630 --> 00:00:34,770 Това означава, че данните, съхранявани в сесия от една страница 12 00:00:34,770 --> 00:00:37,580 по-късно могат да бъдат достъпни от друга страница. 13 00:00:37,580 --> 00:00:40,080 Съхраняване на информация в една сесия е лесно, 14 00:00:40,080 --> 00:00:48,790 и ние го направите чрез знака за долар, подчертават, капитал SESSION променлива. 15 00:00:48,790 --> 00:00:52,620 Dollar знак, подчертават, SESSION-точно като знака за долар, подчертават, GET 16 00:00:52,620 --> 00:00:54,710 и знак за долар, подчертават, POST- 17 00:00:54,710 --> 00:00:58,690 е асоциативен масив, състоящ се от двойки ключови стойности. 18 00:00:58,690 --> 00:01:07,980 Така че ние можем да използваме синтаксис подобен на знака за долар, подчертават, SESSION, 19 00:01:07,980 --> 00:01:16,000 скоба, цитирам, Foo, цитирам, скоби, се равнява на, цитирам, бар, цитирам- 20 00:01:16,000 --> 00:01:20,440 за съхраняване на стойност "бара" в ключ "Foo." 21 00:01:20,440 --> 00:01:24,030 Въпреки това, преди да можем да пишат или четат от масива на сесията, 22 00:01:24,030 --> 00:01:26,770 ние ще трябва да се обадите на специална функция- 23 00:01:26,770 --> 00:01:34,690 сесия, подчертават, започнете, () - 24 00:01:34,690 --> 00:01:37,060 и това ще се инициализира на сесията. 25 00:01:37,060 --> 00:01:39,850 Така че нека да разгледаме един пример. 26 00:01:39,850 --> 00:01:46,570 Нашата първа страница, hello.php, използва сесията за извеждане на някои данни за потребителя. 27 00:01:46,570 --> 00:01:53,920 Не забравяйте, че ние ще трябва да използвате session_start преди да можем да получите достъп до всички данни за сесия. 28 00:01:53,920 --> 00:01:59,010 Сега ние използваме Isset PHP, за да се определи дали съществува ключов 29 00:01:59,010 --> 00:02:03,230 в $ _SESSION асоциативен масив. 30 00:02:03,230 --> 00:02:07,250 Ако този ключ съществува, това означава, че потребителят се е регистрирал в, 31 00:02:07,250 --> 00:02:10,410 така че ние ще се покаже името на потребителя. 32 00:02:10,410 --> 00:02:14,110 Ако този ключ не е установена, това означава, че потребителят не е влизал още в, 33 00:02:14,110 --> 00:02:17,880 така че ние ще се покаже линк към login.php. 34 00:02:17,880 --> 00:02:21,380 Така че нека да разгледаме най-login.php. 35 00:02:21,380 --> 00:02:26,260 Тук долу, ние имаме един единствен HTML форма с един вход. 36 00:02:26,260 --> 00:02:32,720 Атрибут действие Формата е $ _SERVER ['PHP_SELF'], 37 00:02:32,720 --> 00:02:37,440 и това просто означава, че ние искаме да се представи под формата на текущия файл, 38 00:02:37,440 --> 00:02:41,040 което, в този случай, е login.php. 39 00:02:41,040 --> 00:02:43,010 Така че нека да се върнем към началото на този файл. 40 00:02:43,010 --> 00:02:50,100 Ако потребителят изпраща формуляра за кандидатстване, тогава $ _POST ['име'] трябва да се настрои. 41 00:02:50,100 --> 00:02:53,750 За повече информация относно HTML форми и мнение, 42 00:02:53,750 --> 00:02:56,510 разгледайте видеото Web развитие на PHP. 43 00:02:56,510 --> 00:02:59,330 В случай, че потребителят е направил и изпратете формата, 44 00:02:59,330 --> 00:03:03,970 ние бихме искали да напишете стойността, която те въвели в в сесията. 45 00:03:03,970 --> 00:03:08,540 Сега можем да пренасочва потребителя към hello.php. 46 00:03:08,540 --> 00:03:11,800 Защото ние сме съхранява въвеждане на потребителя в сесията, 47 00:03:11,800 --> 00:03:18,240 hello.php ще бъде в състояние за достъп до стойността, която е създадена в login.php. 48 00:03:18,240 --> 00:03:21,010 Така че нека да проверите това в уеб браузър. 49 00:03:21,010 --> 00:03:27,520 Първо, ние ще отидете до http://localhost/hello.php. 50 00:03:27,520 --> 00:03:30,220 Ние може да видите тук, че не сме влезли още в, 51 00:03:30,220 --> 00:03:35,040 така че нека да кликнете върху връзката за вход, които ще ни пренасочи към login.php. 52 00:03:35,040 --> 00:03:41,760 Добре, ще въведете в Мое име, което след това ще се съхранява в сесията. 53 00:03:41,760 --> 00:03:48,950 Чудесно! Сега можем да видим моя вход от login.php на hello.php през сесията. 54 00:03:48,950 --> 00:03:52,270 И така, какво да кажем за влизане на потребителя навън? 55 00:03:52,270 --> 00:03:58,510 Е, за да влезете на потребителя в, ние просто се съхранява стойност в името на сесията. 56 00:03:58,510 --> 00:04:03,040 Така че, за да влезете на потребителя, ние просто трябва да се премахне този ключ име 57 00:04:03,040 --> 00:04:05,040 от масива сесия. 58 00:04:05,040 --> 00:04:09,130 Така че нека да разгледаме този последен файл, logout.php. 59 00:04:09,130 --> 00:04:12,080 Още веднъж, ние ще трябва да се обадя на session_start () 60 00:04:12,080 --> 00:04:15,260 преди да можем да направим нищо сесия свързани. 61 00:04:15,260 --> 00:04:19,240 Сега ние можем просто да се обадя session_destroy (), 62 00:04:19,240 --> 00:04:22,460 който ще се грижи за да се отървем от всички данни в сесията 63 00:04:22,460 --> 00:04:26,790 и след това се пренасочва потребителя обратно към hello.php. 64 00:04:26,790 --> 00:04:30,700 Така че, ако щракнете върху Изход връзката, 65 00:04:30,700 --> 00:04:34,690 можем да видим, че сървърът е забравил кой съм аз, 66 00:04:34,690 --> 00:04:36,970 и аз вече не сте влезли инча 67 00:04:36,970 --> 00:04:39,910 Така че това, което става тук, намираща се под капака? 68 00:04:39,910 --> 00:04:42,250 За да получите най-поведението току-що видяхме, 69 00:04:42,250 --> 00:04:44,760 нашият сървър трябва да направи две неща. 70 00:04:44,760 --> 00:04:48,980 Първо, сървърът трябва по някакъв начин да се съхраняват данните в сеанса. 71 00:04:48,980 --> 00:04:51,910 Различните файлове PHP, които включват уеб сайт 72 00:04:51,910 --> 00:04:56,500 се изпълняват като отделни извиквания на PHP интерпретатора 73 00:04:56,500 --> 00:05:00,550 така локална променлива не може да се споделя между тях. 74 00:05:00,550 --> 00:05:04,030 Вместо това, сървърът трябва да се съхранява нашите данни сесия 75 00:05:04,030 --> 00:05:08,440 в някое място, че няколко. PHP файлове могат да имат достъп. 76 00:05:08,440 --> 00:05:13,940 Второ, сървърът трябва да се сдружават данните за сесията с единствената ми сърфиране сесия. 77 00:05:13,940 --> 00:05:15,940 Когато влезете в Facebook, 78 00:05:15,940 --> 00:05:20,460 вероятно има милиони други хора също са влизали в Facebook в същото време. 79 00:05:20,460 --> 00:05:24,200 Но сървърът се нуждае от начин за асоцииране на моите данни 80 00:05:24,200 --> 00:05:28,340 с настоящия си сесия и данни на някой друг с друга сесия. 81 00:05:28,340 --> 00:05:32,380 За щастие, авторите на PHP мислех за всичко това за нас, 82 00:05:32,380 --> 00:05:35,170 така че ние не трябва да изпълни всеки на този себе си. 83 00:05:35,170 --> 00:05:39,540 Но нека да погледнем какво прави PHP по подразбиране. 84 00:05:39,540 --> 00:05:44,070 Когато посетите страница PHP съдържащ session_start за първи път, 85 00:05:44,070 --> 00:05:47,930 PHP ще генерира голям случайна стойност. 86 00:05:47,930 --> 00:05:53,970 До session_destroy се нарича-или аз не посещават никакви PHP страниците на този сайт за известно време- 87 00:05:53,970 --> 00:05:59,050 че случаен и вероятно уникална стойност ще бъде свързано с мен. 88 00:05:59,050 --> 00:06:02,780 По този начин сървъра има някакъв начин за идентифициране на моята сесия на браузъра 89 00:06:02,780 --> 00:06:05,710 за разлика от някой друг. 90 00:06:05,710 --> 00:06:08,780 Ние можем да разгледаме текущата идентификация на сесията 91 00:06:08,780 --> 00:06:12,380 използвате функцията PHP, session_id. 92 00:06:12,380 --> 00:06:17,250 Тук ние сме просто извеждане на стойността на нашия идентификатор на сесията. 93 00:06:17,250 --> 00:06:20,580 Така че, ако ние отново влезете в пример уеб приложението, 94 00:06:20,580 --> 00:06:25,530 и сега отидете до sessid.php, 95 00:06:25,530 --> 00:06:27,850 ще видим този дълъг низ от символи, 96 00:06:27,850 --> 00:06:31,180 и това е текущия идентификатор за моята сесия, 97 00:06:31,180 --> 00:06:35,410 и това е начина, по който сървърът е следенето на кой съм аз. 98 00:06:35,410 --> 00:06:37,670 Добре, но ние сме само половината от проблема решен. 99 00:06:37,670 --> 00:06:40,910 Разбира се, сървърът вече има някакъв начин да ме идентифицира, 100 00:06:40,910 --> 00:06:46,060 но когато посещавам друга страница, сървърът трябва да използвате повторно същото идентификатор 101 00:06:46,060 --> 00:06:48,910 а не генериране на нов. 102 00:06:48,910 --> 00:06:52,760 Не забравяйте, че ако мога да декларира локална променлива в foo.php 103 00:06:52,760 --> 00:06:55,190 и след това посещение bar.php, 104 00:06:55,190 --> 00:07:00,980 bar.php няма как да знае какво се е случило в foo.php. 105 00:07:00,980 --> 00:07:07,450 Така че изпълнението по подразбиране PHP сесия изисква, че браузърът напомни на сървъра 106 00:07:07,450 --> 00:07:09,740 които сесия ID за използване. 107 00:07:09,740 --> 00:07:12,710 Това се осъществява под формата на куки. 108 00:07:12,710 --> 00:07:15,370 Бисквитката-освен че е вкусна закуска- 109 00:07:15,370 --> 00:07:18,630 е просто малък текстов файл на вашия компютър 110 00:07:18,630 --> 00:07:21,780 че един сървър може да пишете чрез уеб браузъра. 111 00:07:21,780 --> 00:07:27,300 Така след PHP генерира моя уникален идентификатор на сесията чрез session_start, 112 00:07:27,300 --> 00:07:34,210 тя ще каже на уеб браузъра, за да се съхранява, че идентификатор в локална текстов файл, или бисквитка. 113 00:07:34,210 --> 00:07:38,490 Тогава уеб браузъра ще включва, че идентификатор във всяка заявка 114 00:07:38,490 --> 00:07:40,780 че прави на сървъра. 115 00:07:40,780 --> 00:07:44,280 Така че наистина, уеб сървъра не е да си спомняш кой съм. 116 00:07:44,280 --> 00:07:48,780 Вместо това, уеб браузърът е просто спомняйки си уникален идентификатор 117 00:07:48,780 --> 00:07:52,730 че се генерира от PHP и след това постоянно напомня на сървъра 118 00:07:52,730 --> 00:07:55,120 какво, че е идентификатор. 119 00:07:55,120 --> 00:08:00,760 По този начин, информация, като потребителското си име се съхранява на сървъра не ми уеб браузъра. 120 00:08:00,760 --> 00:08:05,190 Браузърът просто казва на сървъра, където се съхранява тази информация PHP 121 00:08:05,190 --> 00:08:07,750 така че PHP може да я възстанови. 122 00:08:07,750 --> 00:08:12,150 Така че това повдига въпроса, където се PHP всъщност съхраняване на тази информация? 123 00:08:12,150 --> 00:08:14,910 По подразбиране, PHP ще съхранявате вашите данни на сесията 124 00:08:14,910 --> 00:08:19,540 във файл вътре в / TMP, или папката "Темп". 125 00:08:19,540 --> 00:08:24,450 Името на този файл ще включва ID на сесията, така че PHP може да се определи 126 00:08:24,450 --> 00:08:28,620 кой файл да се чете и пише от само чрез ID сесия. 127 00:08:28,620 --> 00:08:32,280 Добре. Така че нека да се отвори раздела Network в дебъгер на Chrome 128 00:08:32,280 --> 00:08:34,890 чрез иконата на гаечен ключ в горния десен ъгъл. 129 00:08:34,890 --> 00:08:38,409 Сега нека да се отправят към hello.php отново. 130 00:08:38,409 --> 00:08:42,270 Нека да кликнете върху искането на HTTP да hello.php 131 00:08:42,270 --> 00:08:44,680 и след това кликнете върху заглавията. 132 00:08:44,680 --> 00:08:50,390 Тук можем да видим, че заглавието на бисквитка съдържа ключов нарича PHPSESSID, 133 00:08:50,390 --> 00:08:55,980 или PHP сесия ID-със стойност, която е една и съща, че дълъг низ видяхме 134 00:08:55,980 --> 00:08:59,290 когато ние посетихме sessid.php. 135 00:08:59,290 --> 00:09:04,660 Това е точно как браузърът е да напомня на сървъра какво сесия ID трябва да се използва. 136 00:09:04,660 --> 00:09:08,180 Тя го включи в HTTP хедър. 137 00:09:08,180 --> 00:09:10,500 Добре. Нека да се върнем към терминала. 138 00:09:10,500 --> 00:09:16,450 Да отидете в / TMP, където PHP се съхранява информацията за сесията по подразбиране. 139 00:09:16,450 --> 00:09:19,160 Разбира се, в рамките на тази временна папка, 140 00:09:19,160 --> 00:09:23,550 ето един файл, който съдържа същата точна ID сесия. 141 00:09:23,550 --> 00:09:28,990 Ако се отвори този файл, можем да видим как PHP представлява моята сесия на диска. 142 00:09:28,990 --> 00:09:32,870 Тук низ "Томи" се съхранява в продължение на ключ "името" 143 00:09:32,870 --> 00:09:35,750 което е точно това, което очаквахме. 144 00:09:35,750 --> 00:09:38,850 И това е преглед на сесии в PHP. 145 00:09:38,850 --> 00:09:42,590 Това, което току-що видях, беше само изпълнението по подразбиране на сесии. 146 00:09:42,590 --> 00:09:45,600 В действителност, много сайтове се променят това поведение по подразбиране 147 00:09:45,600 --> 00:09:48,280 за съхраняване на PHP сесии, по-ефективно 148 00:09:48,280 --> 00:09:50,390 в интерес на подобряване на резултатите. 149 00:09:50,390 --> 00:09:52,800 Моето име е Томи, и това е CS50. 150 00:09:52,800 --> 00:09:56,000 [CS50.TV]