[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [To je CS50.] [CS50.TV] Sessions v PHP lze použít k implementaci funkcí, jako je přihlášení uživatele, ve Vašem webovém aplikace. PHP sessions vám umožní přiřadit informace s celou relaci uživatele spíše než jen jednu stránku. Takže to znamená, že jako uživatel navštíví různé stránky s PHP, které tvoří vaše webové stránky, veškeré informace v relaci bude přetrvávat. To znamená, že data uložená v relaci o jednu stranu může být později přistupovat jinou stránku. Uložení informací v relaci je snadné, a my tak učinit prostřednictvím znak dolaru, podtržítko, kapitál SESSION proměnné. Znak dolaru, podtržítko, SESSION, stejně jako znak dolaru, podtržítko, GET a znak dolaru, podtržítko, POST- je asociativní pole se skládá z klíče a hodnoty. Takže můžeme použít syntax, jako znak dolaru, podtržítko, SESSION, držák, citace, foo, citace, držák, rovná, citace, bar, citace- uložit hodnotu "bar" na klíč "foo". Nicméně předtím, než můžeme psát nebo číst z pole zasedání, budeme muset zavolat speciální funkci- sezení, podtržítko, start () - a to bude inicializovat relaci. Takže pojďme se podívat na příklad. Naše první strana, hello.php, používá relace výstupu některé údaje pro uživatele. Pamatujte si, že budeme muset použít session_start, než budeme moci přístup k datům relace. Teď jsme pomocí PHP isset určit, zda existuje klíč v $ _SESSION asociativního pole. Existuje-li, že klíč, to znamená, že má uživatel přihlášen, takže budeme zobrazí jméno uživatele. Pokud není nastavena, že klíč, to znamená, že uživatel není přihlášen ještě, takže budeme zobrazí odkaz na login.php. Takže pojďme se podívat na login.php. Tady dole, máme jeden HTML formulář s jedním vstupem. Formulář je akční atribut je $ _SERVER ['PHP_SELF'], a to jednoduše znamená, že chceme, aby forma mají být předloženy do aktuálního souboru, , které, v tomto případě, je login.php. Takže se vraťme na začátek tohoto souboru. Pokud uživatel předložil vyplněný formulář, pak $ _POST ['name'] musí být nastaven. Pro více informací o HTML formulářů a místo, podívejte se na PHP Web Development videa. V případě, že uživatel udělal odeslání formuláře, bychom chtěli zapsat hodnotu, že zadali v do relace. Nyní můžeme přesměrovat uživatele na hello.php. Vzhledem k tomu, že jsme uložené vstup uživatele do relace, hello.php bude mít přístup k hodnotě, která byla nastavena v login.php. Takže pojďme se podívat na to ve webovém prohlížeči. Za prvé, budeme navigovat na http://localhost/hello.php. Vidíme zde, že jsme nepřihlášen ještě, tak se pojďme klikněte na odkaz pro přihlášení, která nás bude přesměrovat na login.php. Dobře, budu psát své jméno, které pak budou uloženy v relaci. Skvělé! Nyní můžeme vidět můj vstup z login.php na hello.php prostřednictvím relace. Takže, co odhlášení uživatele z? No, aby se přihlášení uživatele v, jednoduše skladovat hodnotu do názvu relace. Takže pro přihlášení uživatele se, my prostě potřebujeme odstranit, že název klíče z pole relace. Takže pojďme se podívat na tento posledního souboru, logout.php. Opět budeme muset volat session_start () předtím, než můžeme dělat cokoliv relace související. Nyní můžeme jednoduše volat session_destroy (), který se bude starat, jak se zbavit všech dat na zasedání a pak přesměruje uživatele zpět do hello.php. Takže když jsem klikněte na odkaz Odhlásit, můžeme vidět, že server zapomněl, kdo jsem, a já jsem již přihlášeni Takže to, co se tady děje pod kapotou? S cílem získat chování jsme právě viděli, Náš server je třeba udělat dvě věci. Za prvé, server musí nějakým způsobem ukládat data v relaci. Různé PHP soubory, které tvoří webové stránky jsou provedeny jako samostatné vyvolání PHP interpretru takže lokální proměnná nemůže být sdílena mezi nimi. Místo toho, server musí ukládat naše data relace na nějakém místě, které více. php soubory mohou přistupovat. Za druhé, potřebuje server spojovat data relace s jedinou mou relaci. Když jsem se přihlásit na Facebook, tam jsou asi miliony dalších lidí také přihlášeni do Facebooku najednou. Ale server potřebuje nějaký způsob, sdružující své údaje s mou aktuální relace a údaje někdo jiný s jinou relaci. Naštěstí autoři PHP myslel o tom všem to pro nás, takže se není třeba provádět nic z toho sami. Ale pojďme se podívat na to, co dělá PHP ve výchozím nastavení. Když jsem navštívit stránku PHP obsahující session_start poprvé, PHP bude generovat velké náhodné hodnoty. Do session_destroy se nazývá nebo nemám navštívit nějaké stránky s PHP na tomto místě na chvíli, že náhodné a pravděpodobně jedinečná hodnota bude spojena se mnou. Tak server má nějaký způsob, jak identifikovat svou relaci procházení na rozdíl od někoho jiného. Můžeme se podívat na aktuální ID relace pomocí funkce PHP, session_id. Tady jsme prostě na výstupu hodnotu naší identifikátor relace. Takže pokud se znovu přihlásit na příkladu webové aplikace, a nyní přejděte na sessid.php, uvidíme, tento dlouhý řetězec znaků, a to je aktuální identifikátor pro mou zasedání, a to, jak je server sledování, kdo jsem. Dobře, ale my jsme jen vyřešit polovinu problému. Jistě, server má nyní nějaký způsob, jak mě identifikaci, ale když jsem se navštívit jinou stránku, server potřebuje znovu ten stejný identifikátor spíše než vytvářet nové. Pamatujte si, že když jsem deklarovat lokální proměnné v foo.php a pak navštivte bar.php, bar.php nemá žádný způsob, jak zjistit, co se stalo v foo.php. Takže implementace sezení výchozí php vyžaduje, aby prohlížeč připomněl server což ID relace použít. To je realizováno v podobě cookie. Cookie-kromě toho, že chutné občerstvení je prostě malý textový soubor v počítači že server může psát prostřednictvím webového prohlížeče. Takže poté, co PHP generuje svůj unikátní ID relace pomocí session_start, to bude vyprávět webový prohlížeč pro uložení, že identifikátor v místním textovém souboru nebo souboru cookie. Pak webový prohlížeč bude obsahovat tento identifikátor každé žádosti že je na server. Takže opravdu, webový server není vzpomněl, kdo jsem. Místo toho, webový prohlížeč je jednoduše pamatovat jedinečný identifikátor , který byl vytvořen pomocí PHP a neustále připomínat server co to je identifikátor. Tak, informace, stejně jako mé uživatelské jméno je uložen na serveru, nikoli můj webovém prohlížeči. Prohlížeč jednoduše říká serveru, kde PHP uložené informace takže PHP může načíst. Tak to vyvolává otázku, kde je PHP vlastně ukládání těchto informací? Ve výchozím nastavení PHP bude ukládat vaše data relace v souboru uvnitř z / tmp nebo složky "temp". Název tohoto souboru bude obsahovat ID relace, takže PHP může určit, který soubor pro čtení a zápis z pouze pomocí ID relace. Dobrá. Takže pojďme otevřít na kartu Síť v Chrome debuggeru přes ikonu klíče v pravém horním rohu. Nyní pojďme hlavu znovu hello.php. Pojďme klikněte na požadavku HTTP hello.php a poté klikněte na záhlaví. Zde můžeme vidět, že záhlaví cookie obsahuje klíč s názvem PHPSESSID, nebo PHP ID relace, s hodnotou, která je, že stejný dlouhý řetězec viděli jsme když jsme navštívili sessid.php. To je přesně tak, jak prohlížeč připomněl server, co ID relace by měly být použity. Je to včetně to v hlavičce HTTP. Dobrá. Pojďme zpět k terminálu. Pojďme přejděte do adresáře / tmp, kde PHP je ukládání informací o relaci ve výchozím nastavení. Opravdu, v této dočasné složky, Zde je soubor, který obsahuje přesně stejný ID relace. Pokud bychom otevřít tento soubor, můžeme vidět, jak PHP reprezentuje svou relaci na disku. Zde řetězec "Tommy" je uložena na klíče "jméno" což je přesně to, co jsme očekávali. A to je přehled sezení v PHP. To, co jsme právě viděli jen Výchozí implementace sezení. Ve skutečnosti, mnoho internetových stránek změnit toto výchozí chování efektivněji ukládat PHP zasedání v zájmu zlepšení výkonu. Jmenuji se Tommy, a to je CS50. [CS50.TV]