You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Ivan Pomykacz 39921938a6 chore: readme update 2 months ago
docs chore: readme update 2 months ago
README.md chore: readme update 2 months ago
content.php chore: readme update 2 months ago
index.php chore: readme update 2 months ago
login.php chore: readme update 2 months ago
login_form.php chore: readme update 2 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.php nebo motorka.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.

Cookies

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.

Session file

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?