Session proměnné

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.

Metody třídy 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.

register(proměnná)

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.

unregister(proměnná)

Proměnná již dále není sesion proměnnou. Její obsah se nezmění, ale již se nepředává na další stránky.

delete()

Zruší všechny session proměnné.

© Jiří Kosek 1999
$Id$