Korábban nem figyeltem rá különösebben tanuláskor, de ma visszamentem, és alaposan tanulmányoztam az ülés életciklusát. A munkamenetek a szerver oldalán tárolódnak, és általában azért, hogy megakadályozzák azok a szerver memóriájában (nagy sebességű hozzáférés esetén), a Sessinon létrehozza az első alkalommal, amikor a felhasználó hozzáfér a szerverhez.Fontos megjegyezni, hogy csak a JSP, Servlet és más programok használata hozza létre egy Sessiont, és csak statikus erőforrások, például HTML és IMAGE használata nem hoz létre Sessiont.
Mikor jár le egy ülés?
1. A szerver töröli a hosszú ideje inaktív szerver memóriáját, és az ülés érvénytelenné válik. A Tomcat-ben az alkalma alapértelmezett lejárati ideje 20 perc.
2. Hívd fel a Session érvénytelenítési módszerét.
Böngészők számára szóló üléskövetelmények:
Bár a szekció a szerveren van tárolva, és átlátható a kliens számára, a normál működéséhez továbbra is a kliens böngészőjének támogatása szükséges. Ez azért van, mert a Session-nek cookie-kat kell használnia azonosítóként. A HTTP protokoll állapot nélküli, és a szekciót nem lehet megítélni a HTTP kapcsolat alapján, hogy ugyanaz az ügyfél-e, ezért a szerver egy JSESSIONID nevű sütit küld a kliens böngészőnek, amely a szekció azonosítójának értékét tartalmazza (azaz a HttpSession.getId()) visszaküldési értékét. A Session a sütit arra használja, hogy azonosítsa, ugyanaz a felhasználó-e.
Ezt a süti automatikusan generálja a szerver, és maxAge attribútuma általában -1, ami azt jelenti, hogy csak a jelenlegi böngészőben érvényes, nem osztják meg a böngészőablakok között, és nem lesz érvényes, amikor a böngésző bezárják. Ezért, amikor ugyanazon gépen két böngészőablak lép fel a szerverhez, két különböző ülés generálódik. Kivéve az új ablakokat, amelyeket linkek, szkriptek stb. nyitnak meg a böngészőablakban (azaz nem olyan ablakok, amelyeket dupla kattintással nyitottak meg az asztali böngésző ikonjain, stb.). Ezek a gyermekablakok megosztják a szülőablak sütit, így egy ülést.
Megjegyzés: Az új ülések frissen megnyílt böngészőablakokban generálódnak, kivéve az alablakokat. A gyermekablak megosztja a szülőablak ülését. Például, ha jobb kattintással kattintasz egy linkre, és a "Új ablakban nyisd meg" opciót a gyorsbillentyű menüben, a gyermekablak hozzáférhet a szülőablak Session-jéhez.
Mi van, ha a kliensböngésző kitiltja a sütiket, vagy nem támogatja a sütit? Például a mobil böngészők túlnyomó többsége nem támogatja a sütiket. A Java Web egy másik megoldást kínál: URL-cím újraírása. Az URL-cím átírása olyan ügyfelek számára egy megoldás, amely nem támogatja a sütiket. Az URL-cím újraírásának elve, hogy a felhasználó ülésének azonosító adatait átírja az URL-címre. A szerver képes leparzálni az átírt URL-t, hogy megkapja a Session azonosítót. Így még ha a kliens nem is támogatja a sütiket, a szekció felhasználható a felhasználói állapot rögzítésére. A HttpServletResponse osztály encodeURL-t (String url) biztosít URL-cím újraírásának megvalósításához, amely automatikusan meghatározza, hogy a kliens támogatja-e a sütiket. Ha az ügyfél támogatja a sütikeket, az URL úgy jelenik meg, ahogy van. Ha az ügyfél nem támogatja a sütiket, a felhasználói munkamenet azonosítója átíródik az URL-be.
Megjegyzés: A TOMCAT úgy dönti el, hogy egy kliens böngésző támogatja-e a sütiket annak alapján, hogy tartalmaz-e egy süti a kérésben. Bár a kliens támogathatja a sütiket, mivel az első kérésnél nem futnak sütiket (mivel nincsenek olyan sütikek, amelyek képesek lenni), az átírt URL-cím továbbra is jsessionid lesz a címben. A szerver már írt sütit a böngészőben a második látogatáskor, így az átírt URL-cím nem tartalmazza a jsessionid a címet.
|