Sessiebeheer
10 belangrijke vragen over Sessiebeheer
Kunt uitleggen waarom er in webaplicaties sesiebeheer nodig is
Twee manieren kunt noemen waarop een servlet of JSP-pagina aan sessiebeheer kan worden gedaan en kunt uitleggen hoe deze met elkaar samenhangen
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
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
Weet hoe u de cookies die met een request zijn meegestuurd, kunt opvragen en doorzoeken
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
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
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:
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)?
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)
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
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