Jeg lagde ikke så meget mærke til det, da jeg studerede før, men i dag gik jeg tilbage og studerede omhyggeligt sessionens livscyklus. Sessioner gemmes på serversiden, og generelt for at forhindre, at de bliver i serverens hukommelse (til højhastighedsadgang), opretter Sessinon første gang brugeren tilgår serveren.Bemærk, at kun adgang til JSP, Servlet og andre programmer vil oprette en session, og kun adgang til statiske ressourcer som HTML og IMAGE vil ikke oprette en session.
Hvornår udløber en session?
1. Serveren vil slette sessionen fra serverhukommelsen, der har været inaktiv i lang tid, og sessionen vil være ugyldig. Standardudløbstiden for en session i Tomcat er 20 minutter.
2. Kald ugyldiggørelsesmetoden for sessionen.
Sessionskrav for browsere:
Selvom sessionen gemmes på serveren og er gennemsigtig for klienten, kræver dens normale drift stadig support fra klientens browser. Dette skyldes, at Session skal bruge cookies som identifikator. HTTP-protokollen er stateless, og sessionen kan ikke bedømmes af HTTP-forbindelsen for at afgøre, om det er den samme kunde, så serveren sender en cookie kaldet JSESSIONID til klientbrowseren, som har værdien af sessionens id (dvs. returværdien af HttpSession.getId()). Session bruger cookien til at identificere, om det er den samme bruger.
Denne cookie genereres automatisk af serveren, og dens maxAge-attribut er normalt -1, hvilket betyder, at den kun er gyldig i den aktuelle browser, ikke deles mellem browservinduer og ikke vil være gyldig, når browseren lukkes. Derfor genereres to forskellige sessioner, når to browservinduer på samme maskine tilgår serveren. Bortset fra nye vinduer, der åbnes via links, scripts osv. i browservinduet (dvs. ikke vinduer åbnet ved dobbeltklik på desktopbrowserikoner osv.). Disse underordnede vinduer deler forældrevinduets cookie og dermed en session.
Bemærk: Nye sessioner genereres i nyåbnede browservinduer, undtagen i undervinduer. Børnevinduet deler sessionen med forældrevinduet. For eksempel, når du højreklikker på et link og vælger "Åbn i nyt vindue" i genvejsmenuen, der popper op, kan undervinduet få adgang til forældrevinduets Session.
Hvad hvis klientbrowseren deaktiverer cookies eller ikke understøtter cookies? For eksempel understøtter langt de fleste mobile browsere ikke cookies. Java Web tilbyder en anden løsning: omskrivning af URL-adresser. Omskrivning af URL-adresser er en løsning for klienter, der ikke understøtter cookies. Princippet bag omskrivning af URL-adresser er at omskrive id-oplysningerne for brugerens session til URL-adressen. Serveren kan parse den omskrevne URL for at få sessions-id'et. På denne måde kan sessionen, selv hvis klienten ikke understøtter cookies, bruges til at registrere brugerens tilstand. HttpServletResponse-klassen leverer encodeURL (streng-url) til at implementere omskrivning af URL-adresser, hvilket automatisk afgør, om klienten understøtter cookies. Hvis klienten understøtter cookies, vil URL'en blive udleveret, som den er. Hvis klienten ikke understøtter cookies, omskrives brugersessionens id til URL'en.
Bemærk: TOMCAT afgør, om en klientbrowser understøtter cookies baseret på, om en cookie er inkluderet i anmodningen. Selvom klienten måske understøtter cookies, da der ikke medbringes cookies på den første anmodning (fordi der ikke er cookies, der kan), vil den omskrevne URL-adresse stadig have jsessionid i adressen. Serveren har allerede skrevet en cookie i browseren ved andet besøg, så den omskrevne URL-adresse vil ikke have jsessionid i adressen.
|