Ještě než vytvoříme naši první session proměnnou, musíme upravit
soubor phplib/local.inc
. Na začátku souboru je definice
třídy, která slouží pro přístup k databázi:
class DB_Poe extends DB_Sql { var $Host = "localhost"; ## var $Database = "poe_sessions"; ## var $User = "kris"; ## var $Password = ""; ## }
My pravděpodobně přejmenujeme třídu DB_Poe
na název,
který odpovídá naší aplikaci a nastavíme členské proměnné tak, aby
obsahovaly správné jméno databáze (ishop
), uživatele
(phplib
) a heslo (octopus
).
class DB_IShop extends DB_Sql { var $Host = "localhost"; var $Database = "ishop"; var $User = "phplib"; var $Password = "octopus"; }
Třída DB_Sql
, ze které je naše odvozena, je přitom
definována v jednom ze souborů phplib/db_*.inc
tak, jak
jsme nastavili v souboru phplib/prepend.php3
, takže
odpovídá námi používané databázi.
Pro používání session proměnných musíme upravit definici následující třídy.
class Poe_Session extends Session { var $classname = "Poe_Session"; var $cookiename = ""; ## defaults to classname var $magic = "Hocuspocus"; ## ID seed var $mode = "cookie"; ## We propagate session IDs with cookies var $fallback_mode = "get"; var $lifetime = 0; ## 0 = do session cookies, else minutes var $database_class = "DB_Poe"; ## Which database to connect... var $database_table = "active_sessions"; ## and find our session data in this table. var $gc_probability = 5; }
Opět si upravíme název z Poe_Session
na
IShop_Session
. Odpovídajícím způsobem musíme změnit i
název třídy uložený v členské proměnné $classname
.
Mně osobně se osvědčilo proměnnou $fallback
nastavit
na prázdnou hodnotu. V opačném případě někdy zlobilo používání cookies
pro přenos identifikátorů session. Samozřejmě musíme nastavit členskou
proměnnou $database_class
na jméno naší třídy s databází
DB_IShop
.
class IShop_Session extends Session { var $classname = "IShop_Session"; var $cookiename = ""; ## defaults to classname var $magic = "Hocuspocus"; ## ID seed var $mode = "cookie"; ## We propagate session IDs with cookies var $fallback_mode = ""; var $lifetime = 0; ## 0 = do session cookies, else minutes var $database_class = "DB_IShop"; ## Which database to connect... var $database_table = "active_sessions"; ## and find our session data in this table. var $gc_probability = 5; }
Nyní již můžeme vytvořit naší první stránku, která používá session
proměnné. Na začátku každé stránky musíme načíst soubor
prepend.php3
, pokud jej ovšem nenačítáme automaticky
pomocí auto_prepend
.
Následně inicializujeme PHPLIB pomocí volání funkce
page_open()
:
page_open(array("sess" => "IShop_Session"));
Následně si můžeme provádět, co chceme. Stačí, když nakonec celou
stránku ukončíme pomocí page_close()
. Proměnná
$sess
je přitom instancí třídy, která nám umožní práci se
session proměnnými. Pomocí metody register()
můžeme
určit proměnné, které se mají chovat jako session proměnné. Malá
ukázka:
<? page_open(array("sess" => "IShop_Session")); ?> <html> <head> <title>První stránka</title> </head> <body> <? $sess->register("x"); $x = 10; ?> Proměnná x je zaregistrována a má hodnotu <?echo $x?>. Podívejte se na <a href="dalsi.php">další stránku</a>, kde uvidíte, zda zůstane obsah proměnné $x zachován. </body> </html> <? page_close() ?>
Vytvoříme skript dalsi.php
, který nám ukáže, zda
session proměnné opravdu fungují tak, jak mají.
<? page_open(array("sess" => "IShop_Session")); ?> <html> <head> <title>Testovací stránka</title> </head> <body> Proměnná x má nyní hodnotu <?echo $x?>. </body> </html> <? page_close() ?>
Za normálních okolností, by byla proměnná $x
prázdná,
nyní díky PHPLIB přebírá hodnotu nastavenou na předchozí
stránce.
Mně osobně použitý způsob práce se session proměnnými připadá
příjemnější než třeba v ASP. Stačí jednou proměnnou zaregistrovat
jako session, a pak s ní pracovat zcela standardním způsobem
jako s každou jinou proměnnou. V ASP se na každou session
proměnnou musíme složitě odvolávat pomocí objektu
Session
.
Pokud si chcete vyzkoušet o něco větší aplikaci, která využívá
PHPLIB, můžete si stáhnout příklady
k mé knize o PHP. V souborech
kosik.php
, zbozi.php
,
vyloha-p.php
a vyloha-m.php
naleznete ukázku
velice primitivního virtuálního obchodního domu, kde se session
proměnné používají k udržování seznamu zboží, které má uživatel
nakoupené v košíku.
Session
V následujícím stručném přehledu se seznámíme s nejdůležitějšími
metodami třídy Session
, která je základem pro tvorbu a
používání session proměnných.
Metoda register()
slouží k zaregistrování dané
proměnné jako session proměnné. Proměnná musí být globální a může mít
libovolný typ -- číslo, řetězec, pole nebo objekt.
Pokud chceme používat jako session proměnné i objekty, musíme
v jejich definici deklarovat dvě členské proměnné --
classname
a persistent_slots
. Proměnná
classname
musí obsahovat řetězec se jménem
třídy. persistent_slots
je naopak pole, které obsahuje
jména členských proměnných, které se mají v rámci session
proměnných zachovávat.
Proměnná již dále není sesion proměnnou. Její obsah se nezmění, ale již se nepředává na další stránky.
Zruší všechny session proměnné.