Sütik kezelése PHP-ban (cookie létrehozása, módosítása, lekérdezése, törlése)

Ebben a cikkben elmagyarázzuk, hogy mik azok a sütik, illetve meg is mutatjuk, hogy hogyan kell cookie-kat létrehozni, módosítani, lekérdezni, illetve törölni PHP nyelv alatt.

Süti (cookie) használat PHP-ban (Süti létrehozása, módosítása, lekérdezése, törlése) című cikk borítóképe

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.

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

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.

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!

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.

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.

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.

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.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!