PHP – 47. díl – sdílení dat pomocí sessions

Dnes se podíváme na další z možností, jak sdílet data mezi stránkami – pomocí sessions.

Úvod

Session je myšlenka, která se hodí v případě, kdy potřebujeme silný mechanismus, který nám umožní pro každého uživatele uchovávat různé údaje. Typickým způsobem použití sessions je přihlašování uživatelů. Typický proces vypadá zhruba takto: Uživatel zadá svoje jméno a heslo. Pokud heslo souhlasí, vytvoří se session. Po celou dobu, kdy se přihlášený uživatel pohybuje uvnitř stránek, mají PHP skripty přístup k proměnným uloženým v session. Je tedy možné určit, kdo je zrovna přihlášený a vyzvedávat různé další údaje uložené v session. Na konci práce se uživatel odhlásí a session je ukončena.

Session je tedy ideální způsob, jak uchovávat informace přidružené k přihlášenému uživateli. Pomocí session proměnných můžeme odlišit jednotlivé uživatele. Výhodou je, že všechny citlivé informace jsou ukládány na serveru, tedy bezpečným způsobem. Do prohlížeče se předává pouze identifikátor session.

Jak to vlastně funguje? Webový server, přesněji řečeno PHP skript, si označí každého uživatele jedinečným identifikátorem (v případě PHP 32 znaků dlouhým řetězcem). Identifikátor se pak předává společně s každým voláním skriptu uživatele. V zásadě existují dvě metody, jak PHP předává identifikátor. První metodou je předávání pomocí cookies (viz 14. díl tohoto seriálu). Ačkoliv skoro každý prohlížeč podporuje cookies, není to vždy zaručeno. Občas má některý prohlížeč cookies vypnuté. S tím bychom měli počítat a v takovém případě je možné použít druhou metodu, a to předávání identifikátoru metodou GET jako parametr v URL (viz předchozí díl tohoto seriálu). Tato druhá metoda je ale o dost pracnější pro nás, pro programátory.

Pokud máme uživatele identifikovaného, máme v podstatě všechno potřebné. PHP tím pádem ví, o jakou session se jedná, a na serveru si vyhradí prostor, kde bude pro každou session ukládat proměnné.

PHP od verze 4 obsahuje mechanismus, který umí maximum práce se sessions automatizovat.

Session v PHP – první kroky

Použití session v PHP je velice jednoduché. Je pouze potřeba, aby PHP bylo nastaveno tak, aby sessions podporovalo. Pokud budete používat intranetový server ke zkoušení, tak tam všechno už nastaveno je.

Pokud chceme používat sessions, tak začneme stránku voláním funkce session_start. Tuto funkci bychom měli volat dříve, než přijde v PHP skriptu jakýkoli výstup, proto je ideální použít funkci session_start co nejvíce na začátku. Vlastní session proměnné jsou potom v poli s názvem $_SESSION.

Vyzkoušíme si první příklad, který bude rozložen do dvou PHP skriptů. První PHP skript session zaregistruje, a pošle do session proměnnou a s hodnotou 3. Druhý PHP skript bude v souboru s názvem dalsi_stranka.php a vypíše tuto proměnnou.

Zde je první PHP skript:

<?php
session_start();
?>
<html>
<head>
<title>Příklad 1. z 47. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$_SESSION[`a`] = 3;
?>
<p>Proměnná a je zaregistrována. Podívejte se na
<a href="dalsi_stranka.php">další stránku</a>.
</p>
</body>
</html>

A zde je druhý PHP skript, který uložte do souboru dalsi_stranka.php:

<?php
session_start();
?>
<html>
<head>
<title>Příklad 2. z 47. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
if (isset($_SESSION[`a`]))
  echo `Session proměnná a = `,$_SESSION[`a`];
else
  echo `Session proměnná a není zaregistrována.`;
?>
</body>
</html>

Pro vyzkoušení příkladů spusťte nejdříve první skript, a v něm klikněte na odkaz, který spustí druhý skript. Při tom dojde k přenosu proměnné a s hodnotou 3 mezi prvním a druhým skriptem.

Registrování a odregistrovávání proměnných

Každou proměnnou, kterou přidáme jako index do pole $_SESSION, tímto způsobem zaregistrujeme. Každá zaregistrovaná proměnná se přenáší do všech PHP skriptů ve stejné session až do té doby, dokud jí neodregistrujeme.

Každá registrovaná proměnná se předává mezi PHP skripty v rámci stejné session.

Registrovat proměnné jde dvěma způsoby. Prvním způsobem je použít takovou proměnnou v poli $_SESSION, jak už jsme použili výše v příkladech. Druhým způsobem je možnost zaregistrování proměnné pomocí funkce session_register. Je ovšem vhodné oba způsoby nekombinovat.

Odregistrovat proměnná se dá jediným způsobem, a to použitím funkce session_unregister.

Zjistit, zda je proměnná registrována se dá zjistit pomocí funkce session_is_registered.

Zde je příklad, jak použít funkci session_register k zaregistrování proměnné. K zobrazení předané session proměnné používáme PHP skript další_stranka.php z předchozího příkladu:

<?php
session_start();
?>
<html>
<head>
<title>Příklad 3. z 47. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
// Registrace proměnné a.
session_register(`a`);
 
// Použití zaregistrované proměnné.
$a = 10;
?>
<p>Proměnná a je zaregistrována. Podívejte se na
<a href="dalsi_stranka.php">další stránku</a>.
</p>
</body>
</html>

Co když nefungují cookies?

PHP se snaží automaticky předávat identifikátor sessionu pomocí cookies. Pokud by čistě náhodou měl prohlížeč cookies zakázáno, musíme se postarat o předávání identifikátoru ručně. K tomu existuje konstanta s názvem SID, která má hodnotu prázdného řetězce, pokud se PHP podařilo přenést identifikátor pomocí cookie, a nebo bude obsahovat parametr vhodný k předání metodou GET do URL. Takže první příklad z tohoto článku ošetřený pro všechny způsoby by vypadal takto:

<?php
session_start();
?>
<html>
<head>
<title>Příklad 4. z 47. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$_SESSION[`a`] = 3;
?>
<p>Proměnná a je zaregistrována. Podívejte se na
<a href="dalsi_stranka.php?<?php echo SID; ?>">další stránku</a>.
</p>
</body>
</html>

Témata článku: Software, Windows, Programování, PHP, Cookies, Sdílení, První funkce, Díl, SES, Typický příklad, Head, Echo, Druhý typ, Meta, Jedinečný parametr, Jedinečný identifikátor, HTML, Ideální případ

Určitě si přečtěte

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

** Po půl roce je tu další aktualizace Windows ** A opět přináší hlavně hromadu drobných kosmetických vylepšení ** Podívali jsme se na ty nejzajímavější

17.  10.  2017 | Jakub Čížek | 186

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

19.  10.  2017 | David Polesný | 25

Přichází doba hypersonických zbraní. Hrozí zvýšené riziko jaderného konfliktu

Přichází doba hypersonických zbraní. Hrozí zvýšené riziko jaderného konfliktu

** Světové mocnosti vyvíjí nové, nesmírně rychlé zbraně ** Jsou schopné pokořit rychlost Mach 5 ** Tyto zbraně mohou zvýšit riziko rozpoutání válečného konfliktu

19.  10.  2017 | Stanislav Mihulka | 20


Aktuální číslo časopisu Computer

Nový seriál o programování elektroniky

Otestovali jsme 17 bezdrátových sluchátek

Jak na nákup vánočních dárků ze zahraničí

4 tankové tiskárny v přímém souboji