PHP munkamenet és PHP cookie-k példával
⚡ Okos összefoglaló
A PHP-ben a sütik és a munkamenetek (Sessions) egyaránt megőrzik az állapotot az állapot nélküli HTTP protokollon keresztül, de az adatokat eltérően tárolják. Ez az útmutató elmagyarázza, hogyan mentenek a sütik kis fájlokat a kliensen, hogyan tárolják a munkamenetek az adatokat a szerveren, és hogyan hozhatók létre, olvashatók és törölhetők mindegyik működő kóddal.
Mi az a Cookie?
A süti egy kis, maximum 4 KB méretű fájl, amelyet a webszerver tárol a kliens számítógépen.
A cookie beállítása után minden oldalkérelem visszaadja a cookie nevét és értékét.
Egy süti csak arról a domainről olvasható, amelyről kibocsátották. Például egy www.guru99.com domaint használó sütikészlet nem olvasható a domainről. karrier.guru99.com.
Az interneten található webhelyek többsége más domain elemeket jelenít meg, például a hirdetéseket. Az ezeket az elemeket kiszolgáló domainek saját cookie-kat is beállíthatnak. Ezeket harmadik féltől származó cookie-knak nevezzük.
A felhasználó által létrehozott cookie csak az ő számára látható. Más felhasználók nem láthatják az értékét.
A legtöbb webböngésző rendelkezik lehetőséggel a sütik, harmadik féltől származó sütik, vagy mindkettő letiltására.
Ebben az esetben a PHP a süti token átadásával válaszol a URL.
Az alábbi ábra szemlélteti a cookie-k működését.
Itt,
1) A felhasználó lekér egy olyan oldalt, amely sütiket tárol
2) A szerver elhelyezi a cookie-t a felhasználó számítógépén
3) A felhasználó egyéb oldalkérései visszaadják a cookie nevét és értékét
Miért és mikor használjunk sütiket?
- A HTTP egy állapot nélküli protokoll; a sütik lehetővé teszik számunkra, hogy tracAz alkalmazás állapotát a felhasználó számítógépén tárolt kis fájlok segítségével figyeli. A sütik tárolási útvonala a böngészőtől függ. Az Internet Explorer általában az Ideiglenes internetfájlok mappában tárolja őket.
- A felhasználói élmény személyre szabása – ezt úgy érjük el, hogy a felhasználók kiválaszthatják a preferenciáikat. Az ezt követő oldallekérések a sütikben beállított preferenciák alapján személyre szabottak.
- Tracking a felhasználó által meglátogatott oldalak
Cookie-k létrehozása
Most nézzük meg a süti létrehozásához használt alapvető szintaxist.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
ITT,
- A „setcookie” a PHP függvény a cookie létrehozásához használt.
- A „cookie_name” a süti neve, amelyet a szerver a $_COOKIE tömbváltozóból lekérésekor használ. Kötelező kitölteni.
- A „cookie_value” a süti értéke, és kitöltése kötelező.
- Az „[lejárati_idő]” opcionális; a süti lejárati idejének beállítására használható, például 1 óra. Az időt a PHP time() függvénnyel állíthatjuk be, plusz vagy mínusz egy nullánál nagyobb másodpercszámmal, azaz time() + 3600 = 1 óra.
- A „[cookie_path]” nem kötelező; segítségével beállítható a cookie elérési útja a szerveren. A perjel „/” azt jelenti, hogy a cookie a teljes domainben elérhető lesz. Az alkönyvtárak korlátozzák a cookie-k hozzáférését az aldomainhez.
- A „[domain]” opcionális; felhasználható a sütik elérésének hierarchiájának meghatározására, pl.
www.cookiedomain.coma teljes domaint jelenti, miközbenwww.sub.cookiedomain.comkorlátozza a cookie-k elérésétwww.sub.cookiedomain.comés annak altartományai. - A „[secure]” opcionális; az alapértelmezett érték „hamis”. Ez határozza meg, hogy a süti HTTPS-en keresztül kerül-e elküldésre, ha igazra van állítva, vagy HTTP-n, ha hamisra van állítva.
- A „[httponly]” opcionális. Ha igazra van állítva, akkor a kliensoldali szkriptnyelvek, mint például a JavaForgatókönyv nem férhet hozzá a sütihez.
Jegyzet: A PHP setcookie függvényt a HTML nyitó tag előtt kell végrehajtani.
Most nézzünk egy példát, amely sütiket használ.
Készítünk egy alapvető programot, amely lehetővé teszi számunkra, hogy a felhasználónevet egy hatvan másodperc után lejáró sütiben tároljuk.
Az alábbi kód a fenti példa „cookies.php” megvalósítását mutatja be.
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
output:
the cookie has been set for 60 seconds
A Cookie érték lekérése
Hozzon létre egy másik „cookies_read.php” nevű fájlt a következő kóddal.
<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>
output:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Megjegyzés: A $_COOKIE egy PHP beépített szuperglobális változó. Ez tartalmazza az összes beállított süti nevét és értékét.
A sütik számát és méretét a böngésző korlátozza, jellemzően domainenként körülbelül 50 süti és sütinként 4 KB.
Alkalmazásunk tesztelése. Tegyük fel, hogy a PHP fájljaidat egy phptuts mappába mentetted.
- 1. lépés – Nyissa meg a webböngészőjét, és írja be a URL http://localhost/phptuts/cookies_read.php
Megjegyzés: Csak egy üres tömb jelenik meg
- 2. lépés – Böngésszen a következőhöz: URL http://localhost/phptuts/cookies.php
- 3. lépés – váltson vissza az első lapra, majd kattintson a frissítés gombra
Várj egy percet, majd kattints újra a frissítés gombra. Milyen eredményeket kaptál?
Cookie-k törlése
- Ha egy sütit a lejárati ideje előtt meg akar semmisíteni, akkor a lejárati időt olyan időpontra állítsa be, amely már lejárt.
- Hozz létre egy új fájlt cookie_destroy.php néven a következő kóddal:
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Ismételje meg a fenti szakasz 1–3. lépéseit a sütiértékek lekérésével kapcsolatban.
- Nyissa meg a URL http://localhost/phptuts/cookie_destroy.php
- Váltson a URL http://localhost/phptuts/cookies_read.phpMilyen eredményeket jelenít meg?
Mi az a munkamenet?
- A munkamenet a szerveren tárolt globális változó.
- Minden munkamenethez egyedi azonosító van hozzárendelve, amely a tárolt értékek lekérésére szolgál.
- Amikor egy munkamenet létrejön, a felhasználó számítógépén egy, az egyedi munkamenet-azonosítót tartalmazó süti kerül tárolásra, és minden kéréskor visszakerül a szerverre. Ha a kliens böngésző nem támogatja a sütiket, akkor az egyedi PHP munkamenet-azonosító jelenik meg a... URL.
- A munkamenetek a cookie-khoz képest viszonylag nagy mennyiségű adat tárolására képesek.
- A munkamenet értékei automatikusan törlődnek a böngésző bezárásakor. Ha tartósan szeretné tárolni az értékeket, akkor tárolja azokat az adatbázisban.
- Csakúgy, mint a $_COOKIE tömbváltozó, a munkamenet változóit a $_SESSION tömbváltozó tárolja. A cookie-khoz hasonlóan a munkamenetet a HTML-címkék előtt kell elindítani.
Miért és mikor érdemes a Sessions alkalmazást használni?
- Fontos információkat, például a felhasználói azonosítót, biztonságosabban szeretné tárolni a szerveren, ahol a rosszindulatú felhasználók nem tudják módosítani.
- Értékeket szeretne átadni egyik oldalról a másikra.
- Alternatívát keresel a sütik helyett azokon a böngészőkön, amelyek nem támogatják a sütiket.
- A globális változókat hatékony és biztonságosabb módon szeretnéd tárolni, mintha átadnád őket a URL.
- Fejlődő vagyping egy alkalmazás, például egy áruházping olyan kosár, amelynek ideiglenesen 4 KB-nál nagyobb kapacitású információkat kell tárolnia.
Munkamenet létrehozása
Egy munkamenet létrehozásához először meg kell hívni a PHP session_start függvényt, majd az értékeket a $_SESSION tömbváltozóban kell tárolni.
Tegyük fel, hogy tudni akarjuk, hányszor töltöttek be egy oldalt. Ehhez használhatunk egy munkamenetet.
Az alábbi kód bemutatja, hogyan hozhat létre és kérhet le értékeket munkamenetekből.
<?php session_start(); // start the session if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
output:
You are visitor number 1
A munkamenet-változók megsemmisítése
A session_destroy() függvény a teljes PHP munkamenet megsemmisítésére szolgál.
Ha csak egyetlen munkamenet-elemet szeretnél megsemmisíteni, akkor az unset() függvényt kell használnod.
Az alábbi kód bemutatja, hogyan kell használni mindkét módszert.
<?php
session_destroy(); // destroy entire session
?>
<?php unset($_SESSION['product']); // destroy product session item ?>
A session_destroy eltávolítja az összes munkamenet-adatot, beleértve a munkamenethez társított sütiket is.
Az unset csak az egyes munkamenet-változókat szabadítja fel. A többi adat érintetlen marad.





