Zaobchádzanie s cookies a reláciou v Java servlete

1. Prehľad

V tomto výučbe sa budeme venovať spracovanie súborov cookie a relácií v prostredí Java pomocou serverov Servlets.

Ďalej v krátkosti popíšeme, čo je súbor cookie, a preskúmame niekoľko príkladov jeho použitia.

2. Základy súborov cookie

Jednoducho povedané, cookie je malý kúsok údajov uložených na strane klienta, ktoré servery používajú pri komunikácii s klientmi.

Používajú sa na identifikáciu klienta pri zasielaní následnej žiadosti. Môžu sa tiež použiť na prenos niektorých údajov z jedného servletu do druhého.

Viac podrobností nájdete v tomto článku.

2.1. Vytvorte cookie

The Cookie trieda je definovaná vjavax.servlet.http balíček.

Aby sme to klientovi poslali, musíme vytvorte jeden a pridajte ho k odpovedi:

Cookie uiColorCookie = nový Cookie ("farba", "červená"); response.addCookie (uiColorCookie); 

Jeho API je však oveľa širšie - poďme ho preskúmať.

2.2. Nastavte dátum vypršania platnosti cookies

Môžeme nastaviť maximálny vek (metódou maxAge (int)), ktorý definuje, koľko sekúnd má byť daný súbor cookie platný:

uiColorCookie.setMaxAge (60 * 60); 

Nastavili sme maximálny vek na jednu hodinu. Po uplynutí tejto doby cookie nemôže byť klientom (prehliadačom) použitý pri odosielaní žiadosti a mal by byť tiež odstránený z vyrovnávacej pamäte prehliadača.

2.3. Nastavte doménu súborov cookie

Ďalšou užitočnou metódou v Cookie API je setDomain (reťazec).

To nám umožňuje určiť názvy domén, na ktoré by mal byť klientom doručený. Závisí to aj od toho, či názov domény zadáme explicitne alebo nie.

Nastavíme doménu pre cookie:

uiColorCookie.setDomain ("example.com");

Súbor cookie sa doručí ku každej žiadosti odoslanej používateľom example.com a jeho subdomény.

Ak neurčíme doménu výslovne, bude nastavená na názov doményktorý vytvoril cookie.

Napríklad, ak vytvoríme cookie z example.com a nechajte názov domény prázdny, potom sa doručí do domény www.example.com (bez subdomén).

Spolu s názvom domény môžeme určiť aj cestu. Pozrime sa na to ďalej.

2.4. Nastavte cestu cookie

Cesta určuje, kam bude doručený súbor cookie.

Ak explicitne zadáme cestu, potom a Cookie sa doručí na danú adresu URL a do všetkých jej podadresárov:

uiColorCookie.setPath ("/ welcomeUser");

Implicitne bude nastavená na adresu URL, ktorá vytvorila súbor cookie a všetky jeho podadresáre.

Teraz sa zamerajme na to, ako môžeme získať ich hodnoty vo vnútri a Servlet.

2.5. Prečítajte si súbory cookie na servlete

Súbory cookie k požiadavke pridáva klient. Klient skontroluje jeho parametre a rozhodne, či ho môže doručiť na aktuálnu adresu URL.

Všetky cookies môžeme získať volaním getCookies () na požiadanie (HttpServletRequest) prešiel na Servlet.

Prostredníctvom tohto poľa môžeme iterovať a vyhľadať to, čo potrebujeme, napríklad porovnaním ich mien:

public Voliteľné readCookie (reťazcový kľúč) {return Arrays.stream (request.getCookies ()) .filter (c -> key.equals (c.getName ())) .map (Cookie :: getValue) .findAny (); }

2.6. Odstráňte súbor cookie

Toodstrániť cookie z prehliadača, do odpovede musíme pridať nový s rovnakým názvom, ale s a maxAge hodnota nastavená na 0:

Cookie userNameCookieRemove = nový Cookie ("userName", ""); userNameCookieRemove.setMaxAge (0); response.addCookie (userNameCookieRemove);

Vzorovým prípadom použitia na odstránenie súborov cookie je akcia odhlásenia používateľa - bude možno potrebné odstrániť niektoré údaje, ktoré boli uložené pre aktívnu reláciu používateľa.

Teraz vieme, ako môžeme zaobchádzať s cookies vo vnútri a Servlet.

Ďalej pokryjeme ďalší dôležitý objekt, ku ktorému veľmi často pristupujeme z a Servlet - a Session objekt.

3. HttpSession Objekt

The HttpSession je ďalšou možnosťou ukladania údajov súvisiacich s používateľmi v rámci rôznych požiadaviek. Relácia je úložisko na strane servera, ktoré obsahuje kontextové údaje.

Údaje sa nezdieľajú medzi rôznymi objektmi relácie (klient má prístup k údajom iba zo svojej relácie). Obsahuje tiež páry kľúč - hodnota, ale v porovnaní s cookie môže relácia obsahovať objekt ako hodnotu. Mechanizmus implementácie úložiska je závislý od servera.

Relácia sa s klientom spája pomocou súboru cookie alebo parametrov požiadavky. Viac informácií nájdete tu.

3.1. Zasadnutie

Môžeme získať HttpSession priamo z požiadavky:

HttpSession session = request.getSession (); 

Vyššie uvedený kód vytvorí novú reláciu pre prípad, že neexistuje. To isté môžeme dosiahnuť volaním:

request.getSession (true)

V prípade, že chceme iba získať existujúcu reláciu a nevytvoriť novú, musíme použiť:

request.getSession (false) 

Ak na stránku JSP vstupujeme prvýkrát, predvolene sa vytvorí nová relácia. Toto správanie môžeme zakázať nastavením zasadanie atribút nepravda:

Vo väčšine prípadov webový server používa súbory cookie na správu relácie. Keď sa vytvorí objekt relácie, potom server vytvorí súbor cookie pomocou JSESSIONID kľúč a hodnota, ktorá identifikuje reláciu.

3.2. Session Atribúty

Objekt relácie poskytuje množstvo metód na prístup (vytváranie, čítanie, úprava, odstraňovanie) atribútov vytvorených pre danú reláciu používateľa:

  • setAttribute (reťazec, objekt) ktorý vytvorí alebo nahradí atribút relácie kľúčom a novou hodnotou
  • getAttribute (reťazec) ktorá číta hodnotu atribútu s daným menom (kľúčom)
  • removeAttribute (reťazec) čím sa odstráni atribút s daným menom

Môžeme tiež ľahko skontrolovať už existujúce atribúty relácie volaním getAttributeNames ().

Ako sme už spomenuli, objekt relácie sme mohli načítať z požiadavky. Keď to už máme, môžeme rýchlo vykonať vyššie spomenuté metódy.

Môžeme vytvoriť atribút:

HttpSession session = request.getSession (); session.setAttribute ("attributeKey", "Sample Value"); 

Hodnotu atribútu je možné získať pomocou jeho kľúča (názvu):

session.getAttribute ("attributeKey"); 

Atribút môžeme odstrániť, keď ho už nepotrebujeme:

session.removeAttribute ("attributeKey"); 

Známym prípadom použitia relácie používateľa je zneplatnenie všetkých údajov, ktoré sa ukladajú, keď sa používateľ odhlási z našej webovej stránky. Objekt relácie poskytuje riešenie tohto problému:

session.invalidate (); 

Táto metóda odstráni celú reláciu z webového servera, aby sme z nej už nemali prístup k atribútom.

HttpSession objekt má viac metód, ale tá, ktorú sme spomenuli, je najbežnejšia.

4. Záver

V tomto článku sme sa zaoberali dvoma mechanizmami, ktoré nám umožňujú ukladať údaje používateľov medzi následnými požiadavkami na server - súbor cookie a relácia.

Nezabúdajte, že protokol HTTP je bezstavový, a preto je nevyhnutné udržiavať stav medzi požiadavkami.

Útržky kódu sú ako vždy k dispozícii na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found