Aki foglalkozott már javascripttel, annak ismerős lehet a sütik (cookie) használata. Működése ugyanaz, csak itt jóval egyszerűbb a megvalósítása. A cookie és a session jól használható látogatók azonosítására, adatok átviteléhez a következő oldalra - ezért ezek a fejletteb PHP oldalak nélkülözhetetlen kellékei.
Mi a süti (cookie)?
A süti egy viszonylag kis mennyiségű adatsor, amit a böngésző ment a kliens számítógépre egyszerű szöveges adatfájl formájában. A fájl létrehozása, kiolvasása és módosítása automatikusan, a háttérben történik és természetesen az adott oldal bezárásakor is megmarad. Mivel a süti adatfájlja szorosan kapcsolódik az őt létrehozó weboldalhoz, az adott oldal későbbi meglátogatásakor rendelkezésre áll az adatfájl tartalma. A sütik használatát a látogató böngészője biztonsági beállításaival korlátozhatja, vagy blokkolhatja.
Mire jó nekünk ez? Segítségével a látogató egyéni beállításai (pl. kiválasztott oldaldesign) tárolhatók egy későbbi látogatás esetére. Használatával a szerveren láthatók és akár webstatisztikában rögzíthetők a látogatói szokások (utolsó látogatás ideje, felkeresett oldalak...), de gyakran használják a látogató védett oldalakra való belépése után a bejelentkezett állapot megjegyzésére, adatok egyik oldalról a következő oldalra történő továbbítására is. A vonatkozó szabvány szigorú biztonsági előírásokat tartalmaz, így minden létrehozott sütit csak az őt létrehozó domainról lehet elérni - a különböző domainokról letöltött oldalak soha nem férhetnek hozzá egymás adataihoz, még akkor sem, ha több böngészőablak van egyszerre nyitva. A sütik megmaradnak a böngésző bezárása után, sőt a gép leállításával sem törlődnek, amíg a lejárati idejük le nem telt.
Minden gép egy domainhoz maximum 20 sütit tárolhat, amelyek a következőket tartalmazzák:
- a süti neve
- értéke
- a lejárati időpont
- a süti származtatási helyének elérési utvonala
- a kapcsolat biztonságos voltának jelölése
Egy süti adatfájl maximum 4kb nagyságú lehet, ami kb. 4000 karaktert jelent - szóval terjedelemben nem korlátoznak nagyon. Egy süti adattartalma kb. így néz ki:
fájlnév: Felhasznalo_neve@audit.median.hufájl helye: c:\Document and Settings\Felhasznalo_neve\Cookies (Windows XP rendszeren) median_count
81.182.190.181.310943119250000031469035604363000822
audit.median.hu/
1024
2759538432
30859208
1582018384
29659796
*
Hogyan érjük el a szerveren a kliensgépen tárolt sütit? A böngésző minden oldal kérésekor elküldi az adott domainhoz a kliensgépen tárolt süti adatfájl tartalmát. Így érheti el a szerveren futó PHP kód a neki szánt adatokat. A PHP-ben ezeket az adatokat a $_COOKIES tömb tartalmazza, ami - szuperglobális tömb lévén - mindenhonnan elérhető. Az új sütik elhelyezésére, vagy azok módosítására vonatkozó utasítások a HTTP fejlécében utaznak a szerverről a kliens felé is.
fel...
A süti létrehozása
A sütiket létrehozhatjuk a HTTP fejlécében, a PHP header() parancsával, de ezzel felesleges foglalkozni, mivel a php fejlesztői erre a célra egy specifikus függvényt, a SetCookie() beépített függvényt bocsátanak rendelkezésre. A függvény egy kötelező és további opcionális adatot vár: a süti neve, értéke, lejárata, elérési útja, a használatára jogosult tartomány, és egy szám ami a biztonságos kapcsolatot jelzi (ha ez 0 akkor mindenképp menni fog a munka a sütikkel). A süti nevén kivül a fenti adatokat nem kötelező megadni. A süti lejáratát UNIX időbélyegben kell megadni (UNIX időbélyeg az 1970. január 1. 1:00 óta eltelt másodpercek száma).
Süti elhelyezése a SetCookie() függvénnyel:
<?php
setcookie( "belephet", "login_nev", time() + 3600, "/", "thomas98.hu", 0);
?>
ahol a time() az aktuális időt határozza meg, amihez 3600 másodpercet hozzáadva 1 óra érvényességet adtunk meg a sütinknek. A süti neve belephet, értéke pedig a belépéskor megadott loginnév.
Fontos:
- A sütikben csak skaláris (string, integer, double, vagy boolean) adattípusokat lehet tárolni.
fel...
A süti módosítása, törlése
Egy süti módosításához azt megnevezve beírjuk a módosított adatokat.
A süti törlésekor (pl. ha a látogató kilép a védett tartalomból) a lejárati időt módosítjuk egy már elmúlt időpontra: <?php
setcookie( "belephet", "login_nev", time() - 600, "/", "thomas98.hu", 0);
?>
Így a süti megmarad ugyan, de a tartalma nem lesz tovább elérhető.
Fontos:
- Kódoláskor nem felejtsük el, hogy a SetCookie() függvénnyel csak a süti elhelyezésére adtunk utasítást. A sütit az aktuális oldalon nem, csak a következő oldalon érhetjük el.
- A SetCookie() függvény lefutása előtt semmilyen kimenetet nem küldhetünk a kimenetre (HTML kódokat, sőt még üres betűhelyet sem), mivel az első elküldött kimenet előtt a PHP automatikusan létrehozza a szükséges fejléc adatokat. Ha erről megfeledkezünk, PHP hibaüzenet lesz a jutalmunk.
Forrás: Thomas Web Műhely |