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.