A süti, amit a böngésző megeszik
Miért pont sütemény? A böngészők édességgombás memóriájának ínyenc története
Képzeld el: belépsz egy pékségbe, és egy fejlesztő áll meg előtted a polcok előtt. Megpillantja a csokis kekszet, és önkéntelenül megkérdezi: „Ez támogatja a sessionkezelést?" Nem, nem poénból mondja – komolyan nem érti, miért ne lehetne állapottartó egy sütemény.
Ez a desszert és adat közötti vicces találkozás nem véletlen. Történet arról szól, hogyan tanult meg az internet emlékezni.
A web tájfunja: amikor minden törlődik
Gondolj bele: minden alkalommal, amikor rákattintasz egy linkre vagy beküldesz egy űrlapot, a böngésződ egy teljesen friss kérést küld a szervernek. A szervernek fogalma sincs, mit csináltál három másodperce. Nem emlékszik, hogy bejelentkeztél, bedobtál valamit a kosárba, vagy kiválasztottad a nyelvet.
Ez nem hiba – ez maga a HTTP lényege. Minden kérésnek magában kell hordoznia minden szükséges információt. A szerver nem tudja, hogy ugyanaz a személy vagy, aki az előbb rákattintott a kosárba helyezésre. Számára az a kérés és ez a kérés teljesen idegenek egymásnak.
Statikus weboldalakhoz ez tökéletesen működött. De az internetes élmény ennél sokkal többet akart: bevásárlókosarakat, személyre szabott irányítópultokat, bejelentkezve maradást. A web amnéziája hirtelen óriási problémává vált.
Az állapot: amire a webnek szüksége volt
Az állapot egyszerűen annyit jelent: információ a korábbi műveletekből, ami befolyásolja a következő lépéseket. Bedobod a billentyűzetet a kosárba – az állapot megváltozott, már van benne egy billentyűzet. Ha a fizetéshez érsz, a szervernek le kell olvasnia ezt az állapotot, hogy beleszámolja az összegbe.
Az állapot bárhol lakhat – memóriában, adatbázisban, a böngészőben. A valódi kérdés nem az, hová tegyük, hanem az, hogyan kapcsoljunk össze különálló kéréseket egy logikus élménnyé.
Sessionök: avagy a folytonosság megteremtése
A session egy logikai doboz, ami több elszigetelt HTTP-kérést összefűz egyetlen folyamatos történetté. Gondolj rá úgy, mint a film folytatólagos szála, ami összeköti az egyes oldallátogatásokat. Egy session kezdődhet a bejelentkezéssel és végződhet a kijelentkezéssel, de lehet egy névtelen vásárlási út is felhasználói fiók nélkül.
A lényeg: a HTTP nem hoz létre sessionöket automatikusan. Az alkalmazásod dönti el, mikor kezdődnek, mit tartalmaznak, és mikor érnek véget. Egy felhasználónak öt aktív sessionje lehet egyszerre különböző böngészőablakokban – és ez teljesen rendben van.
Az identitás dilemmája
Itt válnak a dolgok érdekessé. A szerver egyszerre milliónyi aktív sessiont kezel. Amikor egy új kérés érkezik, a szervernek meg kell válaszolnia egy alapvető kérdést: „Ehhez a sessionhöz tartozik?"
Itt jön képbe a session azonosító – egyedi jelölő, ami megkülönbözteti a te sessionödet mindenki mástól. Nem kell jelentéssel bíróia vagy valós személyhez kötöttnek lennie. Lehet egy véletlenszerű karaktersorozat, mondjuk 7f41c0a9 vagy session_88293847. A lényeg az, hogy a szerver ezt használhatja a megfelelő sessionadat előására.
Az azonosító nem maga az adat – csak a kulcs hozzá. A szerver azt mondja: „Add nekem a 7f41c0a9 azonosító alatt tárolt sessiont," és voilá, visszatér a kosarad.
Cookie-k: a szállítóeszköz
De még mindig ott a kérdés: hogyan utazik ez az azonosító minden egyes kéréssel együtt?
A szerver nem támaszkodhat önmagára – minden kérés más szerverpéldányhoz érkezhet. A böngészőnek kell tárolnia az azonosítót és automatikusan visszaküldenie minden kéréssel.
És pontosan ezt csinálják a cookie-k. A szerver küld egy kis adatcsomagot – jellemzően csak egy név-érték párost – a böngészőnek, ami eltárolja, és hűségesen visszaküldi minden további kéréssel. A cookie-k lettek a web emlékező mechanizmusa.
Miért pont „süti" a neve?
Itt homályosodik el a szó eredete. A kifejezés valószínűleg a „magic cookie" unix-fogalomról származik – olyan tokenről vagy értékről van szó, amit programok között adnak át. Az már a történelem homályába vész, hogy a Netscape-nél dolgozó fejlesztő éhes volt-e, amikor megvalósította ezt a funkciót, vagy egyszerűen csak értékelte az unix humort.
Annyit tudunk, hogy olyasvalaki olyan nevet választott, ami garantálta, hogy minden junior fejlesztő első keresése süteményes képeket dob fel dokumentáció helyett. Lehet, hogy ez programozói humor, vagy egyszerűen alábecsülték a „csokis süti recept" keresési volumenét.
Mindenesetre, legközelebb, amikor egy weboldalon meglátod az „elfogadom a cookie-kat" gombot, tudd meg: nem csak a bövigyűjtéshez járulsz hozzá – részt veszel egy ravasz megoldásban, ami a stateless webet valamivé alakította, ami ténylegesen emlékszik rád.
Az NameOcean-nél startupoknak és fejlesztőknek segítünk webjelenlétet építeni: domain regisztrációtól a tárhelyig. Mert néha a cookie-k megértése nem elég – kell az infrastruktúra is, hogy működésre bírjuk őket.