Anksčiau studijuodamas į tai nekreipiau daug dėmesio, bet šiandien grįžau ir atidžiai išstudijavau sesijos gyvavimo ciklą. Seansai saugomi serverio pusėje, ir paprastai tam, kad jie nebūtų serverio atmintyje (didelės spartos prieigai), Sessinon sukuria pirmą kartą, kai vartotojas prisijungia prie serverio.Atkreipkite dėmesį, kad sesija bus sukurta tik prisijungus prie JSP, Servlet ir kitų programų, o tik prisijungus prie statinių išteklių, tokių kaip HTML ir IMAGE, sesija nebus sukurta.
Kada baigiasi sesija?
1. Serveris išvalys seansą iš ilgą laiką neaktyvios serverio atminties ir seansas bus negaliojantis. Numatytasis "Tomcat" seanso galiojimo laikas yra 20 minučių.
2. Iškvieskite negaliojantį sesijos metodą.
Seanso reikalavimai naršyklėms:
Nors seansas saugomas serveryje ir yra skaidrus klientui, normaliam jo veikimui vis tiek reikalingas kliento naršyklės palaikymas. Taip yra todėl, kad "Session" turi naudoti slapukus kaip identifikatorių. HTTP protokolas yra be būsenos, o sesijos negalima vertinti pagal HTTP ryšį, kad būtų galima nustatyti, ar tai tas pats klientas, todėl serveris siunčia slapuką, vadinamą JSESSIONID, į kliento naršyklę, kurio reikšmė yra sesijos id (tai yra grąžinama HttpSession.getId()). Sesija naudoja slapuką, kad nustatytų, ar tai tas pats vartotojas.
Šį slapuką automatiškai sugeneruoja serveris, o jo atributas maxAge paprastai yra -1, o tai reiškia, kad jis galioja tik dabartinėje naršyklėje ir nėra bendrinamas tarp naršyklės langų ir negalioja uždarius naršyklę. Todėl, kai du naršyklės langai tame pačiame kompiuteryje pasiekia serverį, sugeneruojami du skirtingi seansai. Išskyrus naujus langus, atidaromus nuorodomis, scenarijais ir kt. naršyklės lange (t. y. ne langus, atidaromus dukart spustelėjus darbalaukio naršyklės piktogramas ir pan.). Šie antriniai langai bendrina pirminio lango slapuką, taigi ir seansą.
Pastaba: Nauji seansai generuojami naujai atidarytuose naršyklės languose, išskyrus antrinius langus. Antrinis langas bendrina pirminio lango seansą. Pavyzdžiui, dešiniuoju pelės mygtuku spustelėjus nuorodą ir pasirodžiusiame nuorodų meniu pasirinkus "Atidaryti naujame lange", antrinis langas gali pasiekti pirminio lango seansą.
Ką daryti, jei kliento naršyklė išjungia slapukus arba nepalaiko slapukų? Pavyzdžiui, didžioji dauguma mobiliųjų naršyklių nepalaiko slapukų. "Java Web" siūlo kitą sprendimą: URL adreso perrašymą. URL adreso perrašymas yra sprendimas klientams, kurie nepalaiko slapukų. URL adreso perrašymo principas yra perrašyti vartotojo sesijos ID informaciją į URL adresą. Serveris gali išanalizuoti perrašytą URL, kad gautų seanso ID. Tokiu būdu, net jei klientas nepalaiko slapukų, seansas gali būti naudojamas vartotojo būsenai įrašyti. Klasė "HttpServletResponse" pateikia encodeURL (eilutės URL) URL adresų perrašymui, kuris automatiškai nustato, ar klientas palaiko slapukus. Jei klientas palaiko slapukus, URL bus išvestas toks, koks yra. Jei klientas nepalaiko slapukų, vartotojo sesijos ID perrašomas į URL.
Pastaba: TOMCAT nustato, ar kliento naršyklė palaiko slapukus, atsižvelgdama į tai, ar slapukas yra įtrauktas į užklausą. Nors klientas gali palaikyti slapukus, nes po pirmosios užklausos nėra slapukų (nes nėra slapukų, kurie gali), perrašytas URL adresas vis tiek turės jsessionid adrese. Antrojo apsilankymo metu serveris jau parašė slapuką naršyklėje, todėl perrašytame URL adrese nebus jsessionid.
|