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>

Diskuze (11) Další článek: Transmeta zvažuje ukončení výroby procesorů

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


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

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji