Jako interesantna tema, verujem da je mnogim ljudima pojam sesije ili cookie-a nejasan. Zekica je dosta lepo objasnio neke stvari. Ja ću dodati jos samo malo :)
Dakle, zamisli sledeći script:
Code:
<?php
session_start();
$_SESSION['foo'] = "Foo";
$_SESSION['foo_1'] = "Foo_1";
...
$_SESSION['foo_n'] = "Foon_n";
?>
Ovaj session_start() kreira jedinstveni (unique) session id koji se sastoji od 32 karaktera, a vrednosti ovih foo promenljivih smešta negde na serveru (po defaultu u fajl u /tmp diru ali to se može podesiti, tako da se recimo to čuva u bazi, shared memoriji i sl).
E sad, obzirom da je http stateless protokol, jedini način da server prilikom sledećeg requesta restaurira vrednosti tih foo promenljivih jeste da mu nekako pošalješ id te sesije. Za to postoje 2 načina, da se session_id šalje preko query stringa (
www.site.com/index.php?SESSIONID=12345...) ili preko cookie-a.
Što se cookie-a tiče, nema tu nikakve magije. Recimo gornji script bi ti vratio nešto ovako u okviru response headera:
Code:
X-Powered-By: PHP/4.3.3
Set-Cookie: PHPSESSID=63b4628a86b2615437a2c012ca239d0e; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Ovo Set-Cookie: ... u headeru kao posledicu ima smeštanje cookie na klijentov hdd. Nakon toga prilikom svakog novog requesta koji pravi klijentov browser, vrednost cookie se šalje kroz request, tj. http request header izgleda otprilike ovako:
Code:
Accept: text/xml,application/xml,application/xhtml+xml,text/html;...
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
Cache-Control: max-age=0
Connection: keep-alive
Cookie: PHPSESSID=cc38f1b2fc8d858d53fc64d443fd5a71
Host: localhost
Keep-Alive: 300
User-Agent: mozilla/5.0 (x11; u; linux i686; en-us; rv:1.7) gecko/20040626 firefox/0.9.1
Dakle, klijentov browser šalje vrednost PHPSESSID id-a preko cookie-a koja je zapisana na klijentov hdd. Na serveru se na osnovu toga restauriraju sve promenljive sesije koje su zapisane negde na serveru (hdd,baza,shared memory ...).
I naravno, po meni najpotpunije objašnjenje php sesija možeš naći u manualu, dakle
http://www.php.net/session
Pozdrav