Sessiebeheer

10 belangrijke vragen over Sessiebeheer

Kunt uitleggen waarom er in webaplicaties sesiebeheer nodig is

Omdat het voor veel webapplicaties wel nodig is om een toestand bij te houden en HTTP een stateless (toestandloos) protocol is. Bijvoorbeeld als een gebruiker 1 cd besteld kan dit zonder sessiebeheer als antwoord op de pagina gegenereerd worden die een winkelwagen toont met die cd, maar als dezelfde gebruiker een 2e cd wil bestelle, gaat dit zonder sessiebeheer mis, omdat er niet achterhaald kan worden wat er al in de wnkelwagen van de gebruiker zat.

Twee manieren kunt noemen waarop een servlet of JSP-pagina aan sessiebeheer kan worden gedaan en kunt uitleggen hoe deze met elkaar samenhangen

Default gebruikt de servlet API een cookie om een sessie ID te bewaren. De browser geeft de cookie door aan de server bij elke request
Als cookeis gedisabled zijn kun je URL encoding gebruiken om de session ID in de URL voor elke pagina van een applicatie.
Om de data voor elke sessie te bewaren, maakt de server een session object aan.

Weet hoe u cookies kunt creeren en kunt meesturen met een response

Een cookie is een name/value pair.
Voorbeelden:
- jsessionid=D1345678990768066475
- user_id=87
- userName=jsmith
Op de server maakt de webapplicatie een cookie aan en stuurt deze naar de browser. Op de client bewaard de browser de cookie en stuurt deze terug op het moment dat het een pagina van de server opvraagd.

Voorbeeld code om een cookie te creeren:
Cookie userIdCookie = new Cookie("userIdCookie", userId);
userIdCookie.setMaxAge(60*60*24*365*2); //set the age to 2 years
userIdCookie.setPath("/");  //allow access by the entire application
response.addCookie(userIdCookie);
  • Hogere cijfers + sneller leren
  • Niets twee keer studeren
  • 100% zeker alles onthouden
Ontdek Study Smart

Weet hoe u de cookies die met een request zijn meegestuurd, kunt opvragen en doorzoeken

Voorbeeld code die een cookie ophaald:
Cookie [] cookies = request.getCookies();
String cookieName = "userIdCookie";
String cookieValue = "";
for (int i=0; i<cookies.lenght; i++)
{
  Cookie cookie = cookies[i];
  if (cookieName.equeals(cookie.getName()))
      cookieValue = cookie.getValue();
}

Weet hoe bepaald wordt welke cookies worden meegestuurd met welke request en hoe dat beinvloed kan worden

Standaard, als er geen pad gezet wordt, geldt een cookie maar voor 1 applicatie. Een request voor een bepaalde servlet of JSP-pagina leidt tot een response die vergezeld gaat van een cookie waar geen pad voor gezet is. De server stuurt die cookie dan later mee met iedere request afkomstig van een servlet of JSP-pagina die zich binnen dezelfde submap van webapps bevindt. Willen we dat een cookie voor meer projecten geldt of voor slechts een deel van een project dan moeten we een pad zetten

Weet hoe u parameters aan een request kunt meegeven in een URL en in een hidden fields en wat de voor en nadelen zijn van beide methoden

Om parameters aan een request te kunnen meegeven moet je de parameters toevoegen aan het einde van de URL:
Bijvoorbeeld bij een A tag die een product code aan een URL toevoegt:
<a href="cart?productCode=8601"Add to cart</a>

Aangezien de A tag altijd de Get methode gebruikt, zorgt dit ervoor dat de parameters worden getoond in de browser.

Voordeel is dat er geen cookies gebruikt worden en nadeel is dat URL rewriting 2 limitaties heeft:
- De meeste browsers hebben een limiet voor het aantal karakters die aan de URL meegeven kunne worden, dit is 2000 karakters
- Het is lastig om spaties en speciale karakters toe te voegen in de waarden van de parameters

Voorbeeld om hidden fields te gebruiken in een Form tag:
Een form tag die gebruik maakt van een hidden text field:
<form action="cart" method="post">
  <input type="submit"value="Add To Cart">
  <input type = "hidden" name="productCode "value="8601">
</form>

Omdat hidden field zichtbaar zijn in de source code van de pagina kun je dit niet gebruiken voor secure data, zoals passwords.

Je kunt hidden fields wel gebruiken om parameters door te gevn aan een servlet of JSP.

Stel dat we in een sessie gegevens willen bijhouden over een winkelwagen (een instantie van klasse Cart). Aan het begin van de sessie moet de winkelwagen gecreëerd worden en als attribuut aan de sessie worden toegevoegd. Gedurende de hele sessie wordt verder deze wagen gebruikt. In een servlet kan dit bereikt worden door het opnemen van het volgende code fragment:

HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute("cart");
if (cart == null) {
  cart = new Cart();
  session.setAttribute("cart, cart);
}

In een jsp pagina kan dezelfde code gebruikt worden, maar met het weglaten van de eerste regel. Het session-object is net als bijvoorbeeld het request en response een ingebouwd JSP-object en wordt (als het al niet bestaat) bij het opvragen van de pagina gecreerd

Is het mogelijk om een cookie te creeren die voortaan met elke HTTP-request van een gegeven client worden meegestuurd (dus ongeacht die site die door die client bezocht wordt)?

Nee dat kan niet, Cookies worden alleen toegestuurd naar de server die ze gecreëerd heeft.

Een servlet bevat de volgende private methode, die wordt aangeroepen vanuit zowel de doGet als de doPost-methode':

private X geeftX(HttpServletRequest request) {
  HttpSession sessie= request.getSession();
  X x;
  if (session.inNew() {
    x = new X();
    sessie.setAttribute("x", x);
  }
  else {
    x= (X) sessie.getAttribute("x");
  }
  return x;
}

a) Leg in een paar zinnen uit wat de bedoeling is van deze methode
b) Welk gevaar schuilt in het gebruik van de isNew-methode?
c) Hoe kunt u het anders doen? (U hoeft de code niet te tonen)

a) Deze methode haalt de waarde op van een attribuut "x" in het sessieobject. Als de sessie zojuist gecreëerd is, wordt een nieuwe instantie van X gemaakt en als attribuut "x" aan de sessie toegevoegd.
b) Het opvragen van een JSP-pagina creëert onmiddellijk een sessieobject, ook als daar niets mee gedaan wordt. Dat maakt het lastig om er zeker van te zijn dat een sessie net gecreëerd is.
c) Het is veiliger om te testen of de sessie al een attribuut "x" bevat.

A)Noem 2 manieren om parameters mee te geven aan een servlet of een JSP-pagina en geef bij beide een voorbeeld van een situatie waarin u voor die manier zou kiezen.
b) Welke van deze methoden zijn geschikt om de verwachte waarde van een wachtwoord door te geven

a) Parameters kunne meegevene worden in de URL of in een hidden fiels. De eerste methode is het meest eenvoudig. Deze methode verdient de voorkeur in alle gevallen waarin een beperkt aantal waarden met een beperkte lengte en zonder specifieke karakters als ? en & moeten worden doorgegeven. Hidden fields zijn vooral handig voor waarden met speciale karakters.
b) Beide methoden zijn ongeschikt voor gevoelige informatie. Parameters meegegevn in een hidden field zijn zichtbaar door de paginabron te bekijken

De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:

  • Een unieke studie- en oefentool
  • Nooit meer iets twee keer studeren
  • Haal de cijfers waar je op hoopt
  • 100% zeker alles onthouden
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo