|
|
9 months ago | |
|---|---|---|
| docs | 9 months ago | |
| README.md | 9 months ago | |
| content.php | 9 months ago | |
| index.php | 9 months ago | |
| login.php | 9 months ago | |
| login_form.php | 9 months ago | |
README.md
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.phpnebomotorka.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?

