Sessions a Cookies

Cookies

Pomocφ Cookies (kolßΦk∙ :) m∙₧eme uchovßvat a nßsledn∞ zpracovßvat r∙znΘ hodnoty v rßmci celΘho webu. Novou cookie musφme zaregistrovat p°ed odeslßnφm jakΘhokoliv v²stupu a to pomocφ funkce:

setcookie( jmΘno [, hodnota [, expirace [, cesta [, domΘna [, zabezpeΦenφ]]]]])

Jako parametry m∙₧eme dosadit (povinn² parametr je pouze jmΘno):

JednotlivΘ cookie jsou p°φstupnΘ v poli $HTTP_COOKIE_VARS nebo pomocφ klasickΘ "$nazev_promenne". Hlavnφ nev²hodou m∙₧e b²t, ₧e cookies jsou p°φstupnΘ a₧ po dalÜφm naΦtenφ strßnky.

Nynφ si ukß₧eme p°φklady vyu₧itφ cookie:


<?
// Zaregistrujeme cookie "jmeno" s hodnotou "Jirka" a platnostφ 1 minuta.
setcookie("jmeno", "Jirka", time()+60);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Test Cookies</title>
</head>
<body>
<p>Cookie: <? echo $jmeno;?></p>
<p>Cookie: <? echo $HTTP_COOKIE_VARS["jmeno"];?></p>
</body>
</html>

A dalÜφ:


<?
// Zaregistrujeme cookie "jmeno", hodnotou "Jirka", platnostφ 1 hodina, adresß° /test/, domΘna webguru.cz.
// Tato cookie nebude sprßvn∞ fungovat, dokud nebude umφst∞na ve zvolenΘm adresß°i a domΘn∞.
setcookie("jmeno", "Jirka", time()+3600, "/test/", "webguru.cz");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Test Cookies</title>
</head>
<body>
<p>Cookie: <? echo $jmeno;?></p>
<p>Cookie: <? echo $HTTP_COOKIE_VARS["jmeno"];?></p>
</body>
</html>


┌vod do Sessions

╚asto budeme pot°ebovat p°enΘst hodnoty prom∞nn²ch z jednΘ strßnky na druhou. V tomto p°φpad∞ bychom mohli vyu₧φt p°edßvßnφ hodnot prom∞nn²ch pomocφ POST, GET metody, skryt²ch polφ nebo vyu₧φt Cookies (obdoba sessions, kterΘ se uchovßvß v klientskΘm prohlφ₧eΦi). Manipulace se session nenφ nijak nßroΦnß a hrav∞ ji zvlßdnete. Pro lepÜφ pochopenφ problematiky si p°edstavte session jako textov² soubor. Tento soubor mß v sob∞ ulo₧eny zaregistrovanΘ prom∞nnΘ a jejich hodnoty. Ka₧dß session je identifikovanß prßv∞ pou₧it²m WWW prohlφ₧eΦem, a proto se nem∙₧e stßt, ₧e by n∞kdo zneu₧il vlastnosti tΘto technologie.


D∙le₧itΘ nastavenφ

Pro prßci se session musφte mφt dob°e nastavenΘ PHP (php.ini). To znamenß:


Vyu₧φvßnφ

Abychom mohli vyu₧φvat session prom∞nnΘ musφme na zaΦßtek ka₧dΘ strßnky, kde chceme mφt podporu session uvΘst nßsledujφcφ funkci: session_start(). Tφm zaruΦφme podporu session i na danΘ strßnce. Hned potΘ nßm (prohlφ₧eΦi) bude p°id∞len jedineΦn² identifikßtor tzv. session ID. Pomocφ tohoto ID se p°enßÜφ session prom∞nnΘ mezi skripty. CelΘ session prom∞nnΘ by nßm byly asi na nic, pokud bychom neum∞li vytvo°it session prom∞nnou a pou₧φt ji. Novou session prom∞nnou m∙₧eme vytvo°it pomocφ funkce session_register("nßzev_prom∞nnΘ") nebo pomocφ pole $_SESSIO. V tomto okam₧iku nßm vznikne zvolenß session prom∞nnß. Do tΘto prom∞nnΘ je pot°eba dosadit n∞jakou hodnotu:


<?
// Chceme vyu₧φt session.
session_start();
// Zaregistrujeme prom∞nnou "cislo" a dosadφme do nφ hodnotu "10".
$_SESSION["cislo"] = 10;
?>

Jak zniΦit session

Session prom∞nnΘ m∙₧eme odregistrovat pomocφ funkce session_unregister("nßzev_prom∞nnΘ"). VÜechny vytvo°enΘ session prom∞nnΘ m∙₧eme odstranit takΘ pomocφ funkce session_unset(). Session odstranφme pomocφ funkce session_destroy(). Tyto funkce m∙₧eme vyu₧φvat tehdy, pokud je povolena direktiva (v php.ini) register_globals na hodnotu On.


P°ehled funkcφ pro prßci se session

Na zßv∞r Vßm ukß₧u n∞kolik funkcφ pro prßci se session.

session_start() - vytvo°φ session (ID)
session_register("nßzev prom∞nnΘ") - zaregistruje zvolenou session prom∞nnou
session_id() - zjistφ aktußlnφ session ID
session_is_registered("nßzev_prom∞nnΘ") - vrßtφ hodnotu TRUE, pokud je session prom∞nnß ji₧ zaregistrovanß a FALSE v p°φpad∞, ₧e jeÜt∞ nenφ zaregistrovßna
session_unregister("nßzev prom∞nnΘ") - odregistruje existujφcφ session prom∞nnou
session_unset() - odstranφ vÜechny session prom∞nnΘ
session_destroy() - zniΦφ session


P°φklady vyu₧itφ session

Na zßv∞r si ukß₧eme p°φklad vyu₧itφ session a session funkcφ. V prvnφm skriptu si zaregistrujeme prom∞nnou "$cislo" a p°i°adφme jφ hodnotu "25". Ve druhΘm skriptu tuto prom∞nnou zobrazφme, zobrazφme session id a na zßv∞r ji zniΦφme.

Skript index.php:


<?
// "Nastartujeme" session engine :).
session_start();

// Do prom∞nnΘ p°i°adφme hodnotu "10".
$_SESSION["cislo"] = 10;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Test Session</title>
</head>
<body>
<p>Session id: <? echo session_id();?></p>
<p><a href="skript.php">DalÜφ strana</a></p>
</body>
</html>

Skript skript.php:


<?
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Untitled</title>
</head>
<body>
<p>Session id: <? echo $PHPSESSID;?></p>
<p>Hodnota prom∞nnΘ: <? echo $_SESSION["cislo"]; ?></p>
<?
// Session zniΦφme:
session_unregister("cislo");
session_destroy();
?>
<p>Hodnota prom∞nnΘ: <? echo $_SESSION["cislo"]; ?></p>
</body>
</html>

Celou ukßzkovou aplikaci si m∙₧ete stßhnout zde.


Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.

Petr Rympler