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Θ.