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.

  • 🍪 Mik azok a sütik: A süti egy kis, maximum 4 KB méretű fájl, amelyet a szerver tárol a kliensen, és amely minden későbbi kéréskor visszatér.
  • 🗄️ Mik azok a foglalkozások: Egy munkamenet (session) egyedi azonosító alatt tárolja az adatokat a szerveren, amelyet a $_SESSION tömbben tárolnak, és amelyre egy munkamenet-süti hivatkozik.
  • 🆚 Főbb különbség: A sütik a kliensen találhatók, és kis, nem érzékeny adatok kezelésére alkalmasak; a munkamenetek a szerveren találhatók, és nagyobb vagy privát adatokat tartalmaznak.
  • 🇧🇷 Sütik létrehozása: A setcookie() függvény minden HTML kimenet előtt beállít egy nevet, értéket, valamint opcionálisan egy lejárati, elérési utat, domaint, biztonságos és httponly jelzőket.
  • 📝 Munkamenetek létrehozása: A session_start() függvény elindít egy munkamenetet, amely után a $_SESSION szuperglobális tömbben olvashatunk és írhatunk értékeket.
  • 🗑️ Takarítás: Egy süti lejártatható egy múltbeli időpont beállításával; munkamenet lezárható a session_destroy() függvénnyel, vagy egy érték törölhető az unset() függvénnyel.
  • 🤖 AI Assist: A mesterséges intelligencia eszközei képesek biztonságos munkamenet-kezelést megvalósítani, és megjelölni a sütikre vagy munkamenetekre vonatkozó gyengeségeket a meglévő PHP kódban.

PHP sütik és munkamenetek

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.

Mi az a Cookie

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.com a teljes domaint jelenti, miközben www.sub.cookiedomain.com korlátozza a cookie-k elérését www.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

A Cookie érték lekérése

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

A Cookie érték lekérése

  • 3. lépés – váltson vissza az első lapra, majd kattintson a frissítés gombra

A Cookie érték lekérése

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.

GYIK

A sütik egy kis fájlban tárolják az adatokat a felhasználó böngészőjében, és minden kéréssel együtt utaznak. A munkamenetek (sessions) a szerveren tárolják az adatokat, és csak egy munkamenet-azonosító sütit küldenek. A munkamenetek biztonságosabbak az érzékeny vagy nagyobb méretű adatok esetén.

Alapértelmezés szerint a PHP fájlokként menti a munkamenet-adatokat a php.ini fájlban a session.save_path által beállított elérési úton, ami gyakran a rendszer ideiglenes könyvtára. A nagy forgalmú webhelyek ezt gyakran adatbázis-, Redis- vagy Memcached-kezelőre váltják.

Állítsd be a HttpOnly jelzőt úgy, hogy JavaA szkript nem tudja beolvasni a sütit, a Secure jelzőt (így csak HTTPS-en keresztül) és a SameSite attribútumot (a webhelyek közötti küldés korlátozása érdekében). Munkamenetek esetén a bejelentkezés után újra kell generálni az azonosítót.

Igen. A mesterséges intelligencia képes bejelentkezési folyamatot generálni, amely újragenerálja a munkamenet-azonosítót, biztonságos sütijelzőket állít be, minimális adatot tárol a szerveroldalon, és időtúllépéseket érvényesít. RevVesse össze a kimenetet a biztonsági követelményeivel.

Igen. A mesterséges intelligencia képes keresni a hiányzó HttpOnly vagy Secure jelzőket, a munkamenet-rögzítés kockázatát, a sütikben tárolt bizalmas adatokat és a bejelentkezés utáni azonosító-regeneráció hiányát, majd javaslatot tenni a javított kódra.

Foglald össze ezt a bejegyzést a következőképpen: