Sessions en Cookies

In de vorige tutorials gebruikten we al reeds sessions, maar er is niet echt die op ingegaan. Daarom gaan we in deze tutorial wat dieper in op het begrip session. In deze tutorial gaan we cookies ook van dichter bij bekijken.

Een session is een object dat data bevat en dat bestaat per gebruiker. De session die draait niet op de client pc maar op de server.
Een cookie is een object dat data bevat en dat bestaat per gebruiker. De cookie draait wel op de client pc.

We hebben eigenlijk alleen nog maar gezien hoe we session kunnen zetten, en niet kunnen “afzetten”. Hoe we ze kunnen verwijderen of automatisch laten verwijderen.

Daarom gaan we hier de verschillende manieren hiervoor in deze tutorial van dichtbij bekijken.

De eerste vraag die we ons moeten stellen is “waarom willen we een session afzetten?”. Het antwoord daarop is heel eenvoudig: het neemt geheugen in op de server, en hoe minder geheugen er bezet is hoe beter! Zeker als de gebruiker de session niet langer gebruikt, of als de gebruiker al lang weg is!

De eerste manier is voor elke session dezelfde time-out kiezen.  Dit kunnen we instellen in ons web.xml betand:

<web-app ...>
  <session-config>
    <session-timeout>25</session-timeout>
  </session-config>>
</web-app>

Dit betekend dat alle sessies na 25 minuten stoppen.

Maar soms willen we slechts 1 sessie een time-out geven, bv. bij een speciaal type gebruiker die niet langer dan 15 minuten op de site mag. Daarvoor kunnen we binnen een servlet volgende code aanroepen:

session.setMaxInactiveInterval(15*60);

Dit is in seconden, dus 15 maal 60 seconden = 15 minuten.

Soms willen we een session direct afsluiten, bv als de client uitlogd. Dan kunnen we natuurlijk setMaxInactiveInterval op 0 zetten maar dit ziet er een beetje krom uit. Daarom is er de invalidate method:

// user wants to log out
session.invalidate();

Nu kan dit session object niet meer gebruikt worden voor deze gebruiker.

Maar soms willen we de data langer bewaren dan 1 sessie, bv. over verschillende dagen. Als je bv. bent ingelogd, wil je ingelogd blijven voor 2 weken en niet dat je elke dag opnieuw moet inloggen. Daarvoor zijn er cookies. Die staan op de client-pc en kunnen dus de gegevens bijhouden dat de gebruiker is ingelogd. Een cookie werkt als volgt:

Cookie cookie = new Cookie("username", "john");
cookie.setMaxAge("14*24*60*60"); // two weeks
response.addCookie(cookie);

De cookie is nu toegevoegd aan het response object en wordt op de client-pc gezet.

Om alle cookies van een applicatie te bekijken kan je de volgende code gebruiken:

Cookie[] cookies = request.getCookies();
foreach(Cookie c : cookies) {
  out.println("Cookie: " + c.getValue());
}

Dit was de tutorial over sessions en cookies.

Sessions en Cookies