Sütik kezelése PHP-ban (cookie létrehozása, módosítása, lekérdezése, törlése)
Ma már minden weboldalnak tájékoztatást kell nyújtania az oldalon használt sütikről, sőt ezenfelül még engedélyt is kell kérnie a felhasználótól a cookie-k használatához.
Bár valószínűleg mindenki találkozott már sütikkel internetezés közben, de ez általában kimerült egy „Elfogadom” vagy „Elutasítom” gomb megnyomásába. Kevesen vannak, akik utána olvastak, hogy mire is valók pontosan a cookie-k.
Ebben a cikkben elmagyarázzuk, hogy mik azok a sütik, illetve meg is mutatjuk, hogy hogyan kell cookie-kat létrehozni, illetve törölni PHP nyelv alatt.
Mi az a süti, cookie?
A HTTP-süti (egyszerűbben süti, angolul cookie) egy információcsomag, amelyet webszerver hoz létre a böngésző segítségével a felhasználó gépén. A weboldalak ezeket a sütiket használják egyes felhasználófüggő műveletek végrehajtására. A cookie-k beállításuktól függő ideig tárolódnak el a számítógépen, ez az idő lehet akár pár óra is, de akár több hónap vagy év is.
Általában cookie-kkal megvalósított funkciók:
- felhasználó bejelentkezve tartása (nem jelentkezik ki a weboldalról egy számítógép újraindítás után sem)
- webshopban kosárhoz adott termékek pár napig benne maradnak a kosárban
- GDPR nyilatkozat elfogadásának/elutasításának tárolása
Süti, cookie létrehozás PHP-ban
Most hogy már tudjuk, hogy mi az a cookie, és azt is, hogy milyen esetekben érdemes használni, itt az ideje, hogy megmutassuk, hogy hogyan hozhatsz létre egy sütit.
Cookie létrehozó szintaxis
setcookie(SÜTINÉV, SÜTIÉRTÉK, time() + SÜTI.LEJÁRATI.IDEJE.MÁSODPERCBEN, ÚTVONAL);
Code language: CSS (css)
A sütit a „setcookie()” függvénnyel tudjuk létrehozni, melynek általában négy paramétert szoktunk megadni:
- SÜTINÉV – ez lesz a süti megjelenő neve
- SÜTIÉRTÉK – ez lesz az az érték, amit a süti tartalmazni fog
- SÜTI.LEJÁRATI.IDEJE.MÁSODPERCBEN – másodpercben kell megadnunk, hogy a süti létrejötte után mennyi idővel szűnjön meg
- ÚTVONAL – azt határozzuk meg vele, hogy a süti hol érvényes a weboldalon belül, ha ‘/’-et állítunk be, akkor az egész domain-en érvényes lesz
Természetesen az összes fent megadott paramétert kiszervezhetjük változóba, a könnyebb átláthasógért.
Mivel a sütik a felhasználó számítógépén tárolódnak, így nagyon fontos, hogy ne tároljunk bennük semmilyen érzékeny adatot!
Példa süti létrehozásra PHP-ban
PHP kód
<?php
setcookie("GDPR", "Elfogadva.", time() + (86400 * 30), "/");
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
Code language: HTML, XML (xml)
A fenti példában létrehoztunk egy cookie-t, amely „GDPR” névre hallgat, értéke az „Elfogadva.”, lejárati ideje a jelenlegi idő („time()”) plusz 86400 (1 nap) másodperc szorozva harminccal. Ami azt jelenti, hogy ez a cookie 30 napig fog élni.
Fontos, hogy a sütit még a HTML dokumentum előtt létrehozzuk!
Süti, cookie értékének lekérdezése PHP-ban
Végre van sütink – vagy mondhatnám úgyis, hogy cookie-nk, de nem lenne túl szerencsés fogalmazás -, használjuk is fel valamire. Nézzük meg azt, hogy hogyan tudom egy cookie értékét megtekinteni vagy megvizsgálni.
Szintaxis
$_COOKIE[NÉV]
Code language: PHP (php)
A sütik esetében ilyenkor belép a képbe egy „$_COOKIE” globális változó, amely tulajdonképpen egy asszociatív tömb, ami azt jelenti, hogy az indexei nem számokkal vannak meghatározva, hanem más értékekkel. Ezek az értékek a változók nevei lesznek. Például, ha fent létrehoztunk egy „GDPR” nevezetű sütit, akkor itt a „$_COOKIE[„GDPR”]-al tudjuk lekérni.
Példa süti értékének lekérésére PHP-ban:
PHP kód
<?php
setcookie("GDPR", "Elfogadva.", time() + (86400 * 30), "/");
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?= $_COOKIE["GDPR"]?>
</body>
</html>
Code language: HTML, XML (xml)
Eredmény
Elfogadva.
Fontos, hogy a weboldal első futtatásánál még hibát fog írni, mert nem találja a sütit, de egy frissítés után már a cookie megtalálható lesz és ki is fogja írni az értékét.
A süti létezését érdemes isset-tel vizsgálni.
Cookie, süti értékének módosítása PHP-ban
Természetesen, ha van lehetőség süti létrehozására, akkor van a módosítására is. Gondolná az ember, mert valójában nincs beépített lehetőség a módosításra PHP-n belül, de egy kis turpissággal áthidalhatjuk ezt a problémát.
Szintaktika
setcookie(SÜTINÉV, SÜTIÉRTÉK, time() + SÜTI.LEJÁRATI.IDEJE.MÁSODPERCBEN, ÚTVONAL);
Code language: CSS (css)
A szintaxis teljes mértékben megegyezik a fentivel, hiszen itt (újra) létrehozunk egy sütit. Természetesen a fent említett leírások érvényesek itt is:
- SÜTINÉV – ez lesz a süti megjelenő neve
- SÜTIÉRTÉK – ez lesz az az érték, amit a süti tartalmazni fog
- SÜTI.LEJÁRATI.IDEJE.MÁSODPERCBEN – másodpercben kell megadnunk, hogy a süti létrejötte után mennyi idővel szűnjön meg
- ÚTVONAL – azt határozzuk meg vele, hogy a süti hol érvényes a weboldalon belül, ha ‘/’-et állítunk be, akkor az egész domain-en érvényes lesz
Példa süti értékének módosítására PHP-ban
PHP kód
<?php
setcookie("GDPR", "Elfogadva.", time() + (86400 * 30), "/"); // létrehozunk egy sütit
setcookie("GDPR", "Elutasítva.", time() + (86400 * 30), "/"); // létrehozunk egy új sütit, amivel tulajdonképpen felülírjuk a már létező sütinket
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?= $_COOKIE["GDPR"]?>
</body>
</html>
Code language: HTML, XML (xml)
Eredmény
Elutasítva.
Fontos, hogy a weboldal első futtatásánál még a korábbi süti fog létezni, de egy újratöltés után már a cookie új értéke fog megjelenni.
Cookie, süti törlése PHP-ban
Valószínűleg most már sejthetitek, hogy ha a módosításhoz trükköznünk kellett, akkor a törléshez is leleményesnek kell lennünk.
Szintaxis
setcookie(SÜTI.NÉV, "", time() - 3600);
Code language: JavaScript (javascript)
Ebbe a „képletbe” csak a „SÜTI.NÉV” helyére kell behelyettesítenünk a törlendő süti nevét.
Példa süti, cookie törlésére PHP-ban
PHP kód
<?php
setcookie("GDPR", "Elfogadva.", time() + (86400 * 30), "/"); // létrehozunk egy sütit
setcookie("GDPR", "", time()-3600);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
Code language: HTML, XML (xml)
A példában látható utasítással a „GDPR” cookie-nak a lejárati idejét egy órával korábbra állítottuk a jelenlegi időnél, így a lejárati idő már mindenképp lejárt, szóval a sütinek nem kell léteznie.
Sütik engedélyezésének/tiltásának vizsgálata
Futtathatunk a weboldalunkon egy olyan kódot, amely megmondja, hogy a cookie-k engedélyezve vannak-e vagy sem. Ez azért jó, mert ha esetleg a felhasználó letiltotta a sütik engedélyezését, akkor is küldhetünk neki egy kis üzenetet, amiben kérjük, hogy fontolja meg az engedélyezésüket.
Példa sütik engedélyezésének, illetve tiltásának vizsgálatára
PHP kód
<html>
<head>
</head>
<body>
<?php
if(count($_COOKIE) > 0) { // ha több cookie van, mint nulla, akkor engedélyezve vannak a sütik, ha nincs több, mint nulla, akkor le vannak tiltva vagy nincsenek sütik
echo "A sütik engedélyezve vannak.";
} else {
echo "A sütik le vannak tiltva.";
}
?>
</body>
</html>
Code language: HTML, XML (xml)
A fenti példában megvizsgáljuk, hogy több cookie van-e, mint nulla. Ha igen, akkor engedélyezve vannak a sütik, ha pedig nincs több, mint nulla, akkor vagy le vannak tiltva a sütik vagy nem hoztunk létre a weboldalunkon sütiket.