3.7 KiB
PHP sessions
Princip SESSIONS spočívá v použití cookies na straně uživatele (prohlížeče) a speciáního souboru na straně serveru.
Při opakované návštěvě stránek prohlížeč odešle společně s požadavkem na stránku i cookie vázané ke stejné doméně. Server se pak podívá mezi soubory, zdali tam není takový, který by nesl stejný identifikátor, jako je uložený v cookie.
To znamená, že prohlížeč si pamatuje, že jste na stránce byli, a pokud tu informaci pošle serveru, tak si vzpomene i server a dojde k navázání sezení, které proběhlo v minulosti.
Proč cookies vůbec vznikly?
Ukázalo se praktické pro server/vývojáře vědět, zdali ten, kdo se z prohlížeče dívá na stránku http://localhost:8080/auto.php
je táž osoba, která zrovna klikla na http://localhost:8080/motorka.php
.
- Jak je vidět, je to stejný server/doména
localhost
. - Ovšem jiná URL (stránka) (
auto.php
nebomotorka.php
) - Díky session můžeme poznat, že jde o stejného uživatele
A proč to vývojář tak potřebuje vědět?
Předtím, než cookies znásilnily reklamní systémy a jiné marketingové nástroje to mělo, a tedy stále má (to jsou ty tzv. funkční cookies, které nejde "vypnout") funkci např. pamatovat si zdali je uživatel přihlášený a podle toho mu nabídnout obsah, který s tím souvisí.
Implementace
Chceme-li použít sessions, je třeba v každém skriptu, který se volá přes URL (např. index.php nebo login.php) zavolat funkci session_start()
.
Všimněte si, že např. v souboru content.php zmíněná funkce není. To proto, že se tento souboru vkládá pomocí include
v souboru index.php
(nepřistupuje se k němu přímo z URL).
Jakmile zavoláme funkci session_start()
, máme dostupnou super globální proměnnou $_SESSION
. A můžeme např. zjistit, zdali je uživatel přihlášený.
if (isset($_SESSION['login'])) {
$user_is_logged = true;
}
Pozor ovšem, $_SESSION['login']
je námi vytvořená hodnota, ovšem v tomto textu je popsaná o pár odstavců dál.
Jak si můžete všimnout ve skriptu index.php
, využíváme pak novou proměnnou $user_is_logged
pro rozhodování, jaký obsah uživateli zobrazíme - zdali formulář nebo obsah dostupný pouze pro přihlášeného uživatele.
Ukázka využití - přihlášení
Není-li uživatel přihlášený, zobrazí se mu formulář. Po jeho odeslální dojde k ověření (autentizaci) ve skriptu login.php.
Ignorujme pro teď fakt, že jsme se dopustili fatálního přešlapu tím, že jsme přihlašovací údaje vložili přímo do skriptu.
Nicméně, bude-li autentizace úspěšná, uloží se přihlásovací jméno do session.
$_SESSION["login"] = $_POST["login"];
Následně se provede přesměrování zpět na výchozí stránku.
header("Location: /index.php");
Cookies
Podíváte-li se do "Developer console" (F12), uvidíte mezi "Cookies" navštívenou stránku.
Cookie nese název PHPSESSID
Poměrně zásadní fakt je, že cookie nese pouze hodnotu nějakého identifikátoru, zde 32965ff632572288af24f0f007393efa
. Nic víc.
Na serveru se pak vytvořil soubor sess_32965ff632572288af24f0f007393efa
, který má v názvu týž identifikátor.
Důležité je, že identifikátor zná pouze klient (prohlížeč) a server. Ideálně nikdo další není zainteresován.
A ano, pokud někdo zjistí např. tuto hodnotu 32965ff632572288af24f0f007393efa
, tak jeho šance na získání vašeho sezení se astronomicky zvýšily. Otázkou pak je, k čemu ten identifikátor byl ... e-shop? sociální síť? banka?