[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [Това е CS50.] [CS50.TV] Сесии в PHP могат да бъдат използвани за изпълнение на функционалност, като потребителските данни за вход в уеб приложението. PHP сесии, които ви позволяват да се сдружават информация с цялата сесия на браузъра на потребителя а не просто една страница. Така че това означава, че като потребител посещава различни PHP страници, които правят вашия уеб сайт, всякаква информация в сесията ще се запази. Това означава, че данните, съхранявани в сесия от една страница по-късно могат да бъдат достъпни от друга страница. Съхраняване на информация в една сесия е лесно, и ние го направите чрез знака за долар, подчертават, капитал SESSION променлива. Dollar знак, подчертават, SESSION-точно като знака за долар, подчертават, GET и знак за долар, подчертават, POST- е асоциативен масив, състоящ се от двойки ключови стойности. Така че ние можем да използваме синтаксис подобен на знака за долар, подчертават, SESSION, скоба, цитирам, Foo, цитирам, скоби, се равнява на, цитирам, бар, цитирам- за съхраняване на стойност "бара" в ключ "Foo." Въпреки това, преди да можем да пишат или четат от масива на сесията, ние ще трябва да се обадите на специална функция- сесия, подчертават, започнете, () - и това ще се инициализира на сесията. Така че нека да разгледаме един пример. Нашата първа страница, hello.php, използва сесията за извеждане на някои данни за потребителя. Не забравяйте, че ние ще трябва да използвате session_start преди да можем да получите достъп до всички данни за сесия. Сега ние използваме Isset PHP, за да се определи дали съществува ключов в $ _SESSION асоциативен масив. Ако този ключ съществува, това означава, че потребителят се е регистрирал в, така че ние ще се покаже името на потребителя. Ако този ключ не е установена, това означава, че потребителят не е влизал още в, така че ние ще се покаже линк към login.php. Така че нека да разгледаме най-login.php. Тук долу, ние имаме един единствен HTML форма с един вход. Атрибут действие Формата е $ _SERVER ['PHP_SELF'], и това просто означава, че ние искаме да се представи под формата на текущия файл, което, в този случай, е login.php. Така че нека да се върнем към началото на този файл. Ако потребителят изпраща формуляра за кандидатстване, тогава $ _POST ['име'] трябва да се настрои. За повече информация относно HTML форми и мнение, разгледайте видеото Web развитие на PHP. В случай, че потребителят е направил и изпратете формата, ние бихме искали да напишете стойността, която те въвели в в сесията. Сега можем да пренасочва потребителя към hello.php. Защото ние сме съхранява въвеждане на потребителя в сесията, hello.php ще бъде в състояние за достъп до стойността, която е създадена в login.php. Така че нека да проверите това в уеб браузър. Първо, ние ще отидете до http://localhost/hello.php. Ние може да видите тук, че не сме влезли още в, така че нека да кликнете върху връзката за вход, които ще ни пренасочи към login.php. Добре, ще въведете в Мое име, което след това ще се съхранява в сесията. Чудесно! Сега можем да видим моя вход от login.php на hello.php през сесията. И така, какво да кажем за влизане на потребителя навън? Е, за да влезете на потребителя в, ние просто се съхранява стойност в името на сесията. Така че, за да влезете на потребителя, ние просто трябва да се премахне този ключ име от масива сесия. Така че нека да разгледаме този последен файл, logout.php. Още веднъж, ние ще трябва да се обадя на session_start () преди да можем да направим нищо сесия свързани. Сега ние можем просто да се обадя session_destroy (), който ще се грижи за да се отървем от всички данни в сесията и след това се пренасочва потребителя обратно към hello.php. Така че, ако щракнете върху Изход връзката, можем да видим, че сървърът е забравил кой съм аз, и аз вече не сте влезли инча Така че това, което става тук, намираща се под капака? За да получите най-поведението току-що видяхме, нашият сървър трябва да направи две неща. Първо, сървърът трябва по някакъв начин да се съхраняват данните в сеанса. Различните файлове PHP, които включват уеб сайт се изпълняват като отделни извиквания на PHP интерпретатора така локална променлива не може да се споделя между тях. Вместо това, сървърът трябва да се съхранява нашите данни сесия в някое място, че няколко. PHP файлове могат да имат достъп. Второ, сървърът трябва да се сдружават данните за сесията с единствената ми сърфиране сесия. Когато влезете в Facebook, вероятно има милиони други хора също са влизали в Facebook в същото време. Но сървърът се нуждае от начин за асоцииране на моите данни с настоящия си сесия и данни на някой друг с друга сесия. За щастие, авторите на PHP мислех за всичко това за нас, така че ние не трябва да изпълни всеки на този себе си. Но нека да погледнем какво прави PHP по подразбиране. Когато посетите страница PHP съдържащ session_start за първи път, PHP ще генерира голям случайна стойност. До session_destroy се нарича-или аз не посещават никакви PHP страниците на този сайт за известно време- че случаен и вероятно уникална стойност ще бъде свързано с мен. По този начин сървъра има някакъв начин за идентифициране на моята сесия на браузъра за разлика от някой друг. Ние можем да разгледаме текущата идентификация на сесията използвате функцията PHP, session_id. Тук ние сме просто извеждане на стойността на нашия идентификатор на сесията. Така че, ако ние отново влезете в пример уеб приложението, и сега отидете до sessid.php, ще видим този дълъг низ от символи, и това е текущия идентификатор за моята сесия, и това е начина, по който сървърът е следенето на кой съм аз. Добре, но ние сме само половината от проблема решен. Разбира се, сървърът вече има някакъв начин да ме идентифицира, но когато посещавам друга страница, сървърът трябва да използвате повторно същото идентификатор а не генериране на нов. Не забравяйте, че ако мога да декларира локална променлива в foo.php и след това посещение bar.php, bar.php няма как да знае какво се е случило в foo.php. Така че изпълнението по подразбиране PHP сесия изисква, че браузърът напомни на сървъра които сесия ID за използване. Това се осъществява под формата на куки. Бисквитката-освен че е вкусна закуска- е просто малък текстов файл на вашия компютър че един сървър може да пишете чрез уеб браузъра. Така след PHP генерира моя уникален идентификатор на сесията чрез session_start, тя ще каже на уеб браузъра, за да се съхранява, че идентификатор в локална текстов файл, или бисквитка. Тогава уеб браузъра ще включва, че идентификатор във всяка заявка че прави на сървъра. Така че наистина, уеб сървъра не е да си спомняш кой съм. Вместо това, уеб браузърът е просто спомняйки си уникален идентификатор че се генерира от PHP и след това постоянно напомня на сървъра какво, че е идентификатор. По този начин, информация, като потребителското си име се съхранява на сървъра не ми уеб браузъра. Браузърът просто казва на сървъра, където се съхранява тази информация PHP така че PHP може да я възстанови. Така че това повдига въпроса, където се PHP всъщност съхраняване на тази информация? По подразбиране, PHP ще съхранявате вашите данни на сесията във файл вътре в / TMP, или папката "Темп". Името на този файл ще включва ID на сесията, така че PHP може да се определи кой файл да се чете и пише от само чрез ID сесия. Добре. Така че нека да се отвори раздела Network в дебъгер на Chrome чрез иконата на гаечен ключ в горния десен ъгъл. Сега нека да се отправят към hello.php отново. Нека да кликнете върху искането на HTTP да hello.php и след това кликнете върху заглавията. Тук можем да видим, че заглавието на бисквитка съдържа ключов нарича PHPSESSID, или PHP сесия ID-със стойност, която е една и съща, че дълъг низ видяхме когато ние посетихме sessid.php. Това е точно как браузърът е да напомня на сървъра какво сесия ID трябва да се използва. Тя го включи в HTTP хедър. Добре. Нека да се върнем към терминала. Да отидете в / TMP, където PHP се съхранява информацията за сесията по подразбиране. Разбира се, в рамките на тази временна папка, ето един файл, който съдържа същата точна ID сесия. Ако се отвори този файл, можем да видим как PHP представлява моята сесия на диска. Тук низ "Томи" се съхранява в продължение на ключ "името" което е точно това, което очаквахме. И това е преглед на сесии в PHP. Това, което току-що видях, беше само изпълнението по подразбиране на сесии. В действителност, много сайтове се променят това поведение по подразбиране за съхраняване на PHP сесии, по-ефективно в интерес на подобряване на резултатите. Моето име е Томи, и това е CS50. [CS50.TV]