Jeg fulgte ikke så mye med på det da jeg studerte før, men i dag gikk jeg tilbake og studerte nøye livssyklusen til økten. Sesjoner lagres på serversiden, og for å forhindre at de havner i serverens minne (for høyhastighetstilgang), oppretter Sessinon første gang brukeren får tilgang til serveren.Merk at kun tilgang til JSP, Servlet og andre programmer vil opprette en sesjon, og kun tilgang til statiske ressurser som HTML og IMAGE vil ikke opprette en sesjon.
Når utløper en økt?
1. Serveren vil slette sesjonen fra serverminnet som har vært inaktivt lenge, og økten vil være ugyldig. Standard utløpstid for en økt i Tomcat er 20 minutter.
2. Kall ugyldiggjøringsmetoden for sesjonen.
Sesjonskrav for nettlesere:
Selv om sesjonen lagres på serveren og er transparent for klienten, krever normal drift fortsatt støtte fra klientens nettleser. Dette er fordi Session må bruke informasjonskapsler som identifikator. HTTP-protokollen er tilstandsløs, og sesjonen kan ikke vurderes av HTTP-tilkoblingen for å avgjøre om det er samme kunde, så serveren sender en informasjonskapsel kalt JSESSIONID til klientnettleseren, som har verdien av id-en til sesjonen (det vil si returverdien til HttpSession.getId()). Session bruker informasjonskapselen for å identifisere om det er samme bruker.
Denne informasjonskapselen genereres automatisk av serveren, og dens maxAge-attributt er vanligvis -1, noe som betyr at den kun er gyldig i den nåværende nettleseren, ikke deles mellom nettleservinduer, og vil ikke være gyldig når nettleseren er lukket. Derfor, når to nettleservinduer på samme maskin får tilgang til serveren, genereres to forskjellige økter. Bortsett fra nye vinduer som åpnes via lenker, skript osv. i nettleservinduet (altså ikke vinduer åpnet ved dobbeltklikk på ikoner for skrivebordsnettleseren osv.). Disse barnevinduene deler foreldrevinduets informasjonskapsel og dermed en økt.
Merk: Nye sesjoner genereres i nylig åpnede nettleservinduer, unntatt i undervinduer. Barnevinduet deler sesjonen med foreldrevinduet. For eksempel, når du høyreklikker på en lenke og velger «Åpne i nytt vindu» i snarveismenyen som dukker opp, kan barnevinduet få tilgang til foreldrevinduets Sesjon.
Hva om klientnettleseren deaktiverer informasjonskapsler eller ikke støtter informasjonskapsler? For eksempel støtter ikke det store flertallet av mobilnettlesere informasjonskapsler. Java Web tilbyr en annen løsning: omskriving av URL-adresser. Omskriving av URL-adresser er en løsning for klienter som ikke støtter informasjonskapsler. Prinsippet for omskriving av URL-adresser er å omskrive ID-informasjonen til brukerens økt til URL-adressen. Serveren kan analysere den omskrevne URL-en for å hente sesjons-id-en. På denne måten, selv om klienten ikke støtter informasjonskapsler, kan sesjonen brukes til å registrere brukerens tilstand. Klassen HttpServletResponse gir encodeURL (streng-url) for å implementere omskriving av URL-adresser, som automatisk avgjør om klienten støtter informasjonskapsler. Hvis klienten støtter informasjonskapsler, vil URL-en bli skrevet ut som den er. Hvis klienten ikke støtter informasjonskapsler, blir brukerens ID omskrevet til URL-en.
Merk: TOMCAT avgjør om en klientnettleser støtter informasjonskapsler basert på om en informasjonskapsel er inkludert i forespørselen. Selv om klienten kan støtte informasjonskapsler, siden ingen informasjonskapsler bæres på den første forespørselen (fordi det ikke finnes informasjonskapsler som kan), vil den omskrevne URL-adressen fortsatt ha jsessionid i adressen. Serveren har allerede skrevet en informasjonskapsel i nettleseren ved andre besøk, så den omskrevne URL-adressen vil ikke ha jsessionid i adressen.
|