[Powered by Google Translate] [PHP Сесіі] [Томі MacWilliam, Гарвардскі універсітэт] [Гэта CS50.] [CS50.TV] Сеансы ў PHP можа быць выкарыстаны для рэалізацыі функцыянальнасці, як карыстацкіх лагінаў, у вашым вэб-дадатак. PHP сесіі дазваляюць звязаць інфармацыю з усёй сеансу прагляду карыстальніка а не проста адной старонцы. Значыць, як карыстальнік наведвае розныя PHP-старонак, якія складаюць ваш сайт, любая інфармацыя, у пасяджэнні будзе захоўвацца. Такім чынам, гэта азначае, што дадзеныя, якія захоўваюцца ў сесіі на адну старонку можа пазней быць даступныя іншую старонку. Захоўванне інфармацыі ў сеансе лёгка, і мы робім гэта з дапамогай знака даляра, падкрэслення, пераменны капітал сесіі. Знак даляра, падкрэслення, СЕСІІ-гэтак жа, як знак даляра, падкрэслення, GET і знак даляра, падкрэслення, POST- ўяўляе сабой асацыятыўны масіў, які складаецца з пар ключ-значэнне. Такім чынам, мы можам выкарыстоўваць сінтаксіс, як знак даляра, падкрэслення, сесія, кранштэйны, цытаты, Фу, цытаты, кранштэйны, роўна, цытаты, бар, цытата- для захоўвання значэння "бар" ў ключавым "Foo". Аднак, перш чым мы можам пісаць ці чытаць з масіва сесіі, мы павінны будзем назваць спецыяльную функцыю- сесія, падкрэсліваюць, пачаць, () - і гэта будзе ініцыялізаваць сеанс. Такім чынам, давайце паглядзім на прыкладзе. Наша першая старонка, hello.php, выкарыстоўвае сесію для вываду некаторыя дадзеныя для карыстальніка. Памятаеце, мы павінны будзем выкарыстоўваць session_start перш чым мы зможам атрымаць доступ да любога дадзеных сеансу. Цяпер мы выкарыстоўваем Isset PHP, каб вызначыць, ці існуе ключ ў $ _SESSION асацыятыўны масіў. Калі гэты ключ існуе, гэта азначае, што карыстальнік увайшоў у сістэму, таму мы будзем адлюстроўваць імя карыстальніка. Калі гэты ключ не ўстаноўлены, гэта азначае, што карыстальнік не ўвайшлі ў раней, таму мы будзем адлюстроўваць спасылку на login.php. Так што давайце зірнем на login.php. Тут, унізе, у нас ёсць адзін від HTML з адным уваходам. Атрыбут дзеянні формы складае $ _SERVER ['PHP_SELF'], і гэта проста азначае, што мы хочам, каб форма для прадстаўлення бягучага файла, які, у дадзеным выпадку, з'яўляецца login.php. Так давайце вернемся да пачатку гэтага файла. Калі карыстальнік прадставіў форму, то $ _POST ['імя'] павінен быць усталяваны. Дадатковыя звесткі аб HTML формаў і пасады, праверыць відэа Вэб-распрацоўка 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. Так што, калі я націскаю на спасылку Выхад, мы бачым, што сервер забыўся, хто я, ня, і я больш не зайшлі Так што тут адбываецца пад капотам? Для таго, каб атрымаць інфармацыю аб паводзінах мы толькі што бачылі, наш сервер павінен зрабіць 2 рэчы. Па-першае, сервер павінен неяк захоўваць дадзеныя ў сесіі. Розныя файлы PHP, якія ўтрымліваюць сайт выкананы ў выглядзе асобных выклікаў інтэрпрэтатара PHP так лакальная пераменная не можа быць падзелена паміж імі. Замест гэтага сервер павінен захоўваць нашы дадзеныя сесіі у нейкім месцы, што множныя. файлы PHP можа атрымаць доступ. Па-другое, сервер павінен звязаць звесткі пра сеанс толькі з маёй сеансу прагляду. Пасля аўтарызацыі, я Facebook, Ёсць, верагодна, мільёны іншых людзей таксама зарэгістраваныя ў Facebook, у той жа час. Але сервер неабходны спосаб звязвання мае дадзеныя з маёй цяперашняй сесіі і дадзеных чужой з другога сесіі. На шчасце, аўтары PHP думаў пра ўсё гэта для нас, так што мы не павінны рэалізаваць усё гэта самі. Але давайце зірнем на тое, што PHP робіць па змаўчанні. Калі я наведваю старонку PHP, які змяшчае session_start ўпершыню, PHP будзе генераваць вялікая выпадковае значэнне. Да session_destroy не называецца-ці я не наведваю ніякіх PHP-старонак на гэтым сайце на некаторы час- што выпадковая і, верагодна, унікальнае значэнне будзе асацыявацца са мной. Такім чынам, сервер мае нейкі спосаб ідэнтыфікацыі мой сеансу прагляду у адрозненне ад чужое. Мы можам зірнуць на цяперашняй сесіі ID з дапамогай функцыі PHP, SESSION_ID. Тут мы проста выводзіць значэнне нашага ідэнтыфікатарам сеансу. Так што калі мы зноў увайсці ў прыкладзе вэб-дадатак, і цяпер перайдзіце да sessid.php, мы ўбачым гэтую доўгую радок знакаў, і гэта бягучая ідэнтыфікатар маёй сесіі, і вось як сервер з'яўляецца адсочванне, хто я. Добра, але мы толькі вырашыць палову праблемы. Вядома, сервер зараз мае нейкі спосаб ідэнтыфікацыі мяне, але, калі я наведваю іншую старонку, сервер павінен паўторна выкарыстоўваць гэты ж ідэнтыфікатар , А ня генерацыі новага. Памятаеце, што калі я абвясціць лакальную зменную ў foo.php а затым наведаць bar.php, bar.php не мае магчымасці даведацца, што адбылося ў foo.php. Так рэалізацыя сесія па змаўчанні PHP патрабуе, каб браўзэр нагадаць сервер якія ідэнтыфікатар сеансу ў выкарыстанні. Гэта рэалізавана ў выглядзе печыва. Печыва ў дадатак да таго, смачныя закускі- проста гэта невялікі тэкставы файл на вашым кампутары што сервер можа напісаць праз вэб-браўзэр. Такім чынам, пасля PHP генеруе свой унікальны ідэнтыфікатар сеанса праз session_start, ён збіраецца расказаць вэб-браўзэр для захоўвання гэты ідэнтыфікатар ў лакальным тэкставым файле або печыва. Тады вэб-браўзэр будзе ўключаць у сябе гэты ідэнтыфікатар ў кожным запыце што гэта робіць да сервера. Так на самай справе, вэб-сервер не памятаючы, хто я. Замест гэтага, вэб-браўзэр проста памятаючы унікальны ідэнтыфікатар , Які быў створаны на PHP, а затым пастаянна нагадваючы сервер што гэта ідэнтыфікатар. Такім чынам, інфармацыя, як маё імя карыстальніка захоўваецца на серверы ня мой вэб-браўзэр. Браўзэр проста паведамляе серверу, дзе PHP зберажоную гэтую інфармацыю так PHP зможа яго аднавіць. Так што ўзнікае пытанне, дзе PHP на самай справе захоўвання гэтай інфармацыі? Па змаўчанні, PHP будзе захоўваць звесткі пра сеанс у файле ўнутры / TMP або тэчцы 'Тэмп'. Імя гэтага файла будзе ўключаць ідэнтыфікатар сеанса так PHP можна вызначыць які файл для чытання і запісы з дапамогай толькі ідэнтыфікатар сеанса. Добра. Так давайце адкрыем ўкладку Сетка адладчык у Chrome праз значок гаечны ключ у правым верхнім куце. Зараз давайце галаву да hello.php зноў. Давайце націснем на запыт HTTP, каб hello.php а затым націсніце на загалоўкі. Тут мы можам бачыць, што загаловак печыва утрымлівае ключ з імем PHPSESSID, або PHP ідэнтыфікатар сеанса-са значэннем, якое ў той жа доўгая радок мы бачылі калі мы наведалі sessid.php. Гэта менавіта тое, як браўзэр нагадвае серверу, што ідэнтыфікатар сеанса варта выкарыстоўваць. Гэта ў тым ліку яго ў загалоўку HTTP. Добра. Давайце галаву назад на тэрмінал. Давайце перайдзіце да / TMP, дзе PHP захоўвае інфармацыю пра сеанс па змаўчанні. Вядома ж, ўнутры гэтага часовую тэчку, вось гэта файл, які ўтрымлівае тую ж самую дакладную ідэнтыфікатар сеанса. Калі мы адкрываем гэты файл, мы можам убачыць, як РНР прадстаўляць сваю сесію на дыску. Вось радок "Томі" знаходзіцца на захоўванні ключом «імя», а гэта менавіта тое, што мы чакалі. І гэта агляд сесій ў PHP. Тое, што мы толькі што бачылі толькі рэалізацыя па змаўчанні сесій. На самай справе, многія вэб-сайты змяніць гэта паводзіны па змаўчанні больш эфектыўна захоўваць PHP сесій ў інтарэсах павышэння прадукцыйнасці. Мяне клічуць Томі, і гэта CS50. [CS50.TV]