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.
SessionV 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é.