Rukovanje kolačićima i sesija u Java Servletu

1. Pregled

U ovom ćemo uputstvu pokriti rukovanje kolačićima i sesijama na Javi, pomoću Servleta.

Uz to ćemo ukratko opisati što je to kolačić i istražiti neke primjere slučajeva upotrebe za njega.

2. Osnove kolačića

Jednostavno rečeno, kolačić je mali dio podataka pohranjen na strani klijenta koji poslužitelji koriste prilikom komunikacije s klijentima.

Koriste se za identificiranje klijenta prilikom slanja naknadnog zahtjeva. Također se mogu koristiti za prosljeđivanje nekih podataka iz jednog servleta u drugi.

Za više pojedinosti pogledajte ovaj članak.

2.1. Stvorite kolačić

The Kolačić razred definiran je ujavax.servlet.http paket.

Da bismo ga poslali klijentu, trebamo izradite jedan i dodajte ga odgovoru:

Kolačić uiColorCookie = novi kolačić ("boja", "crvena"); response.addCookie (uiColorCookie); 

Međutim, njegov je API puno širi - istražimo ga.

2.2. Postavite datum isteka kolačića

Možemo postaviti maksimalnu dob (metodom maxAge (int)) koji definira za koliko sekundi bi dati kolačić trebao vrijediti:

uiColorCookie.setMaxAge (60 * 60); 

Postavili smo maksimalnu dob na jedan sat. Nakon tog vremena klijent (preglednik) ne može koristiti kolačić prilikom slanja zahtjeva, a također ga treba ukloniti iz predmemorije preglednika.

2.3. Postavite domenu kolačića

Još jedna korisna metoda u Kolačić API je setDomain (String).

To nam omogućuje da odredimo imena domena na koja bi ih klijent trebao dostaviti. Ovisi i o tome navodimo li ime domene izričito ili ne.

Postavimo domenu za kolačić:

uiColorCookie.setDomain ("example.com");

Kolačić će biti dostavljen na svaki zahtjev korisnika primjer.com i njegove poddomene.

Ako domenu ne izričito odredimo, postavit će se na ime domenekoja je stvorila kolačić.

Na primjer, ako kreiramo kolačić od primjer.com i ostavite ime domene prazno, tada će biti dostavljeno na www.primjer.com (bez poddomena).

Uz naziv domene, možemo odrediti i put. Pogledajmo to dalje.

2.4. Postavite put kolačića

Put određuje gdje će se dostaviti kolačić.

Ako eksplicitno odredimo put, tada a Kolačić bit će isporučen na zadani URL i sve njegove poddirektorije:

uiColorCookie.setPath ("/ welcomeUser");

Implicitno će biti postavljen na URL koji je stvorio kolačić i sve njegove poddirektorijume.

Sada se usredotočimo na to kako možemo dohvatiti njihove vrijednosti unutar a Servlet.

2.5. Pročitajte kolačiće u Servletu

Kolačiće na zahtjev dodaje klijent. Klijent provjerava svoje parametre i odlučuje može li ih dostaviti na trenutni URL.

Sve kolačiće možemo dobiti pozivom getCookies () na zahtjev (HttpServletRequest) prešao u Servlet.

Možemo se kretati kroz ovaj niz i tražiti onaj koji nam treba, npr. Usporedbom njihovih imena:

javni Izborni readCookie (ključ niza) {return Arrays.stream (request.getCookies ()) .filter (c -> key.equals (c.getName ())) .map (Cookie :: getValue) .findAny (); }

2.6. Uklonite kolačić

Doukloniti kolačić iz preglednika, odgovoru moramo dodati novi s istim imenom, ali s maxAge vrijednost postavljena na 0:

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

Primjer upotrebe uklanjanja kolačića je radnja odjave korisnika - možda ćemo trebati ukloniti neke podatke koji su bili pohranjeni za aktivnu korisničku sesiju.

Sada znamo kako se možemo nositi s kolačićima unutar Servlet.

Dalje ćemo pokriti još jedan važan objekt kojem vrlo često pristupamo s a Servlet - a Sjednica objekt.

3. HttpSession Objekt

The HttpSession je još jedna mogućnost za pohranu podataka vezanih uz korisnike u različitim zahtjevima. Sesija je pohrana na poslužitelju koja sadrži kontekstualne podatke.

Podaci se ne dijele između različitih objekata sesije (klijent može pristupiti podacima samo iz svoje sesije). Sadrži i parove ključ / vrijednost, ali u usporedbi s kolačićem sesija može sadržavati objekt kao vrijednost. Mehanizam implementacije pohrane ovisi o poslužitelju.

Sesija se s klijentom podudara pomoću kolačića ili parametara zahtjeva. Više informacija možete pronaći ovdje.

3.1. Dobivanje sjednice

Možemo dobiti HttpSession izravno iz zahtjeva:

HttpSession sesija = request.getSession (); 

Gornji kod stvorit će novu sesiju u slučaju da ne postoji. To isto možemo postići pozivom:

request.getSession (true)

U slučaju da samo želimo dobiti postojeću sesiju, a ne stvoriti novu, trebamo koristiti:

request.getSession (lažno) 

Ako pristupimo JSP stranici prvi put, tada se prema zadanim postavkama stvara nova sesija. To ponašanje možemo onemogućiti postavljanjem sjednica pripisati lažno:

U većini slučajeva web poslužitelj koristi kolačiće za upravljanje sesijama. Kada se kreira objekt sesije, tada poslužitelj kreira kolačić s JSESSIONID ključ i vrijednost koji identificiraju sesiju.

3.2. Sjednica Atributi

Objekt sesije nudi hrpu metoda za pristup (stvaranje, čitanje, izmjena, uklanjanje) atributa stvorenih za datu korisničku sesiju:

  • setAttribute (niz, objekt) koji stvara ili zamjenjuje atribut sesije ključem i novom vrijednošću
  • getAttribute (String) koji čita vrijednost atributa s danim imenom (ključem)
  • removeAttribute (Niz) koji uklanja atribut s danim imenom

Također postojećim atributima sesije lako možemo provjeriti pozivanjem getAttributeNames ().

Kao što smo već spomenuli, iz zahtjeva bismo mogli dohvatiti objekt sesije. Kad ga već imamo, možemo brzo izvršiti gore spomenute metode.

Možemo stvoriti atribut:

HttpSession sesija = request.getSession (); session.setAttribute ("attributeKey", "Uzorak vrijednosti"); 

Vrijednost atributa može se dobiti pomoću njegovog ključa (imena):

session.getAttribute ("attributeKey"); 

Atribut možemo ukloniti kad nam više ne treba:

session.removeAttribute ("attributeKey"); 

Poznati slučaj upotrebe korisničke sesije je onesposobiti cijele podatke koje pohranjuje kada se korisnik odjavi s naše web stranice. Objekt sesije nudi rješenje za njega:

session.invalidate (); 

Ova metoda uklanja cijelu sesiju s web poslužitelja tako da s nje više ne možemo pristupiti atributima.

HttpSession objekt ima više metoda, ali one koje smo spomenuli su najčešće.

4. Zaključak

U ovom smo članku pokrili dva mehanizma koji nam omogućavaju pohranu korisničkih podataka između sljedećih zahtjeva poslužitelju - kolačića i sesije.

Imajte na umu da je HTTP protokol bez državljanstva, pa je održavanje zahtjeva u svim zahtjevima neophodno.

Kao i uvijek, isječci koda dostupni su na Githubu.