Cookie-k és munkamenet kezelése Java szervleten
1. Áttekintés
Ebben az oktatóanyagban bemutatjuk a cookie-k és a munkamenetek kezelése Java-ban, Servlet segítségével.
Ezenkívül röviden leírjuk, mi is az a süti, és feltárunk néhány minta felhasználási esetet.
2. A sütik alapjai
Egyszerűen fogalmazva, A cookie a kliens oldalon tárolt kis adat, amelyet a szerverek használnak az ügyfelekkel való kommunikáció során.
Az ügyfelek azonosítására használják őket amikor egy későbbi kérést küld. Arra is felhasználhatók, hogy bizonyos adatokat továbbítsanak az egyik szervletről a másikra.
További részletekért olvassa el ezt a cikket.
2.1. Hozzon létre egy cookie-t
A Aprósütemény osztályt ajavax.servlet.http csomag.
Ahhoz, hogy elküldjük az ügyfélnek, meg kell tennünk hozzon létre egyet, és adja hozzá a válaszhoz:
Cookie uiColorCookie = új Cookie ("színes", "piros"); response.addCookie (uiColorCookie);
API-ja azonban sokkal szélesebb - vizsgáljuk meg.
2.2. Állítsa be a Cookie lejárati dátumát
Beállíthatjuk a maximális életkort (módszerrel maxAge (int)), amely meghatározza, hogy egy adott cookie hány másodpercig legyen érvényes:
uiColorCookie.setMaxAge (60 * 60);
A maximális életkort egy órára állítottuk be. Ezen idő elteltével az ügyfél (böngésző) nem tudja használni a cookie-t kérelem küldésekor, és azt is el kell távolítani a böngésző gyorsítótárából.
2.3. Állítsa be a Cookie Domain-t
Egy másik hasznos módszer a Aprósütemény Az API az setDomain (karakterlánc).
Ez lehetővé teszi számunkra, hogy meghatározzuk azokat a domainneveket, amelyekhez az ügyfélnek el kell juttatnia. Ez attól is függ, hogy a domain nevet kifejezetten megadjuk-e vagy sem.
Állítsuk be a cookie domainjét:
uiColorCookie.setDomain ("példa.com");
A sütit minden egyes kérésre eljuttatjuk example.com és annak aldomainjei.
Ha nem adunk meg kifejezetten egy tartományt, akkor az a domain név leszamely létrehozott egy sütit.
Például, ha ebből készítünk egy sütit example.com és hagyja üresen a domain nevet, akkor az a www.example.com (aldomainek nélkül).
A tartománynévvel együtt megadhatunk egy utat is. Nézzük meg ezt a következőt.
2.4. Állítsa be a Cookie útvonalát
Az elérési út határozza meg, hogy hova kerüljön a cookie.
Ha egy utat kifejezetten megadunk, akkor a Aprósütemény a megadott URL-re és annak összes alkönyvtárára kerül:
uiColorCookie.setPath ("/ welcomeUser");
Implicit módon arra az URL-re lesz beállítva, amely létrehozott egy sütit, és annak összes alkönyvtárával.
Most összpontosítsunk arra, hogyan tudjuk lekérni az értékeiket az a-ban Servlet.
2.5. Olvassa el a cookie-kat a Servletben
A cookie-kat az ügyfél hozzáadja a kéréshez. Az ügyfél ellenőrzi a paramétereit, és eldönti, hogy el tudja-e vinni az aktuális URL-re.
Minden sütit telefonon kaphatunk getCookies () kérésre (HttpServletRequest) átadta a Servlet.
Iterálhatunk ezen a tömbön keresztül, és megkereshetjük a szükségeset, például a nevük összehasonlításával:
public Opcionális readCookie (String kulcs) {return Arrays.stream (request.getCookies ()) .filter (c -> key.equals (c.getName ())) .map (Cookie :: getValue) .findAny (); }
2.6. Távolítson el egy cookie-t
Nak nektávolítson el egy cookie-t a böngészőből, újat kell hozzáadnunk a válaszhoz azonos névvel, de a-val maxAge értéke 0:
Cookie userNameCookieRemove = új Cookie ("felhasználónév", ""); userNameCookieRemove.setMaxAge (0); response.addCookie (userNameCookieRemove);
A sütik eltávolításának egyik példája a felhasználó kijelentkezési művelete - előfordulhat, hogy el kell távolítanunk néhány olyan adatot, amelyet egy aktív felhasználói munkamenethez tároltunk.
Most már tudjuk, hogyan kezelhetjük a sütiket a Servlet.
Ezután kitérünk egy másik fontos objektumra, amelyhez gyakran hozzáférünk a Servlet - a Ülés tárgy.
3. HttpSession Tárgy
A HttpSession egy másik lehetőség a felhasználóval kapcsolatos adatok különböző kérésekben történő tárolására. A munkamenet egy szerveroldali tárhely, amely kontextusadatokat tárol.
Az adatok nincsenek megosztva a különböző munkamenet-objektumok között (az ügyfél csak a munkamenetéből férhet hozzá az adatokhoz). Ez tartalmaz kulcs-érték párokat is, de egy sütihez képest egy munkamenet tartalmazhat objektumot értékként. A tárolási megvalósítási mechanizmus szerverfüggő.
A munkamenetet az ügyféllel egy cookie vagy a kérés paraméterei párosítják. További információ itt található.
3.1. Munkamenet létrehozása
Megszerezhetünk egy HttpSession egy kérésből:
HttpSession session = request.getSession ();
A fenti kód új munkamenetet hoz létre, ha nem létezik. Ugyanezt elérhetjük hívással:
request.getSession (true)
Abban az esetben, ha csak meglévő munkamenetet szeretnénk megszerezni, és nem hozunk létre újat, akkor a következőket kell használnunk:
request.getSession (hamis)
Ha először lépünk be a JSP oldalra, akkor alapértelmezés szerint új munkamenet jön létre. A. Beállításával letilthatjuk ezt a viselkedést ülés tulajdonít neki hamis:
A legtöbb esetben egy webszerver sütiket használ a munkamenet-kezeléshez. Amikor létrehoz egy munkamenetobjektumot, akkor egy szerver létrehoz egy cookie-t JSESSIONID kulcs és érték, amely azonosítja a munkamenetet.
3.2. Ülés Attribútumok
A munkamenetobjektum egy csomó módszert kínál az adott felhasználói munkamenethez létrehozott attribútumok elérésére (létrehozása, olvasása, módosítása, eltávolítása):
- setAttribute (karakterlánc, objektum) amely létrehozza vagy lecseréli a session attribútumot egy kulccsal és egy új értékkel
- getAttribute (karakterlánc) amely beolvassa az attribútum értékét egy adott névvel (kulccsal)
- removeAttribute (karakterlánc) amely eltávolítja egy adott névvel rendelkező attribútumot
Hívással könnyen ellenőrizhetjük a már meglévő munkamenet-attribútumokat is getAttributeNames ().
Mint már említettük, lekérhettünk egy session objektumot egy kérésből. Amikor már megvan, akkor gyorsan elvégezhetjük a fent említett módszereket.
Készíthetünk egy attribútumot:
HttpSession session = request.getSession (); session.setAttribute ("attributeKey", "Sample Value");
Az attribútum értéke a kulcsával (név) nyerhető:
session.getAttribute ("attributeKey");
Akkor távolíthatunk el egy attribútumot, amikor már nincs rá szükségünk:
session.removeAttribute ("attributeKey");
A felhasználói munkamenet jól ismert esete az egész tárolt adatok érvénytelenítése, amikor a felhasználó kijelentkezik a weboldalunkról. A session objektum megoldást kínál rá:
session.invalidate ();
Ez a módszer eltávolítja az egész munkamenetet a webszerverről, így már nem férhetünk hozzá az attribútumokhoz.
HttpSession Az objektumnak több módszere van, de az általunk említett módszer a leggyakoribb.
4. Következtetés
Ebben a cikkben két olyan mechanizmust vizsgáltunk meg, amely lehetővé teszi számunkra, hogy felhasználói adatokat tároljunk a szerverre érkező későbbi kérések között - a cookie-t és a munkamenetet.
Ne feledje, hogy a HTTP protokoll hontalan, ezért a kérelmek állapotának fenntartása elengedhetetlen.
Mint mindig, a kódrészletek is elérhetők a Githubon.