Bez session prom∞nn²ch se neobejdeme v ₧ßdnΘ v∞tÜφ aplikaci. Pomocφ session prom∞nn²ch m∙₧eme odliÜit jednotlivΘ u₧ivatele, kte°φ s aplikacφ pracujφ. Ka₧d² nßvÜt∞vnφk virtußlnφho obchodu musφ mφt vlastnφ nßkupnφ koÜφk, do kterΘho si uklßdß zbo₧φ. Nßkupnφ koÜφk mß p°itom ka₧d² u₧ivatel p°ipojen² k aplikaci ù v tomto p°φpad∞ je nßkupnφ koÜφk prßv∞ session prom∞nnou.
Session prom∞nnΘ jsou jednφm z nejpohodln∞jÜφch zp∙sob∙, jak obejφt bezstavovost protokolu HTTP. V protokolu HTTP jsou jednotlivΘ po₧adavky klient∙ zcela nezßvislΘ a autonomnφ operace. Webov² server proto nevφ, kterΘ po₧adavky p°ichßzejφ od jednoho u₧ivatele a nem∙₧e je proto p°edat dßl ani PHP. Pokud vßs napadne, ₧e u₧ivatele lze identifikovat pomocφ IP adresy, tak vßs zklamu. Mnoho firem a menÜφch sφtφ je do Internetu p°ipojeno p°es proxy server a tvß°φ se proto, ₧e majφ jednu spoleΦnou IP adresu.
Malß historka na o₧ivenφ: Tuto vlastnost si neuv∞domila jedna nejmenovß Φeskß firma poskytujφcφ e-mail zdarma, a tak kdy₧ se jeden ze zam∞stnanc∙ firmy p°ihlßsil ke svΘ poÜtovnφ schrßnce p°es webovΘ rozhranφ, vid∞li jeho poÜtu i vÜichni ostatnφ ze stejnΘ firmy, se stejn²m proxy serverem.
Fint, jak jednotlivΘ u₧ivatele identifikovat, je n∞kolik. Nejpou₧φvan∞jÜφ je metoda, kdy si webov² server, resp. aplikace oznaΦφ ka₧dΘho u₧ivatele jedineΦn²m identifikßtorem (t°eba n∞jak²m dlouh²m Φφslem). Identifikßtor se pak p°edßvß spoleΦn∞ s ka₧d²m po₧adavkem u₧ivatele. NejjednoduÜÜφ je proto pro p°edßvßnφ identifikßtoru vyu₧φt cookies. Ne ka₧d² prohlφ₧eΦ vÜak cookies podporuje ù s tφm bychom m∞li poΦφtat. V takov²ch p°φpadech m∙₧eme identifikßtor p°edßvat jako parametr v URL nebo skrytΘ pole formulß°e. To vy₧aduje, abychom identifikßtor p°idßvali za ka₧d² odkaz a do ka₧dΘho formulß°e ù je to dost pracnΘ.
Pokud mßme u₧ivatele identifikovanΘho, mßme vyhrßno. Na serveru si m∙₧eme vyhradit prostor ù v pam∞ti, na disku nebo v databßzi, kam budeme pro ka₧d² identifikßtor (tedy u₧ivatele) uklßdat prom∞nnΘ. A session prom∞nnΘ jsou na sv∞t∞.
PHP4 obsahuje mechanismus, kter² umφ u₧ivatel∙m p°id∞lovat jednoznaΦnΘ identifikßtory a umφ oznaΦit vybranΘ prom∞nnΘ jako session prom∞nnΘ. Session prom∞nnΘ se p°itom mohou uklßdat do sdφlenΘ pam∞ti nebo do soubor∙. Pokud vßm to nestaΦφ, m∙₧ete si nadefinovat vlastnφ funkce pro uklßdßnφ a Φtenφ session prom∞nn²ch ù m∙₧ete je pak uklßdat t°eba do databßze.
Pou₧itφ session prom∞nn²ch je v PHP velice jednoduchΘ. Musφme si vÜak v konfiguraΦnφm souboru php.ini zkontrolovat, zda mßme vÜe sprßvn∞ nastaveno. Standardnφ nastavenφ v∞tÜin∞ u₧ivatel∙ vyhovφ, musφme vÜak zkontrolovat, zda je parametr session.save_path nastaven na n∞jak² existujφcφ adresß°, do kterΘho mß webovß aplikace prßva zßpisu. Uklßdajφ se do n∞j soubory se session prom∞nn²mi jednotliv²ch u₧ivatel∙.
Pokud chceme na strßnkßch pou₧φvat session prom∞nnΘ, m∞li bychom na zaΦßtku strßnky pou₧φt funkci session_start(). Ta nejprve zkontroluje, zda u₧ mß u₧ivatel p°id∞len identifikßtor. Pokud ne, p°id∞lφ mu ho. Pro existujφcφ identifikßtor naΦte vÜechny existujφ session prom∞nnΘ a zp°φstupnφ je jako b∞₧nΘ prom∞nnΘ skriptu.
Pokud chceme z n∞jakΘ prom∞nnΘ ud∞lat session prom∞nnou, poslou₧φ nßm k tomu funkce session_register(). Jako parametr se p°edßvß nßzev prom∞nnΘ (ne samotnß prom∞nnß).
Nßsledujφcφ jednoduch² p°φklad ukazuje, jak m∙₧eme na jednΘ strßnce session prom∞nnou zaregistrovat a na druhΘ pou₧φt jejφ hodnotu.
P°φklad 2.1. Zaregistrovßnφ session prom∞nnΘ ù session_prvni.php
<? session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><title>Prvnφ strßnka se session prom∞nnou</title></head> <body> <? session_register("x"); $x = 10; ?> Prom∞nnß x je zaregistrovßna a mß hodnotu <?echo $x?>. Podφvejte se na <a href="session-dalsi.php">dalÜφ strßnku</a>, kde uvidφte, zda z∙stane obsah prom∞nnΘ $x zachovßn. </body> </html>