1、java中会话跟踪的实现方式分三种:
(1)使用Session:HttpServletRequest.getSession()方法获取或者创建一个HttpSession,使用HttpSession.setAttribute/getAttribute方法实现会话范围内的数据存取,对链接和重定向语句中的URL无需调用encodeURL()或encodeRedirectURL()方法进行编码。SessionID的传递借助Cookie实现。
(2)使用URL重写:对链接和重定向语句中的URL调用encodeURL()或encodeRedirectURL()方法进行
编码,SessionID自动作为请求URL的一部分发送到服务器。
/
实际情况下,为了安全,客户端有可能会禁用Cookie,这样就无法使用Session机制了,而只能使用编码URL的方式。事实上可以将前两种方法结合起来应用,即使用Session对象,同时也对链接和重定向语句中的URL进行编码。这样程序在执行时,首先判断当前的Servlet是否已经执行了HttpSession的invalidate方法,如果已经执行了,直接返回参数URL。接着判断客户端是否禁用了
Cookie,如果没有禁用,则直接返回参数URL,如果禁用了Cookie,则在参数URL中附加SessionID,返回编码后的URL。
(3)使用Cookie而不用Session:使用HttpServletResponse接口的addCookie方法实现向客户端发送Cookie,使用getCookies方法从请求数据中获取Cookie。保存Cookie对象的关键在于setMaxAge方法,如果要删除Cookie,可以将时间值设置为0,如果时间值为负数,则当客户端浏览器关闭时,Cookie将会被删除(Cookie保存在浏览器进程中?)。如果设置时间为正数,Cookie将会被保存到客户机硬盘上。Cookie在构造的时候存在一个唯一标识,服务器可以根据该标识遍历客户端发送过来的Cookies实现会话。
2、会话跟踪使用的Cookie在浏览器关闭后就删除了,不能在多个浏览器进程间共享。
3、保存在硬盘上的Cookie可以在多个浏览器进程间共享。
4、Session对象在服务器上创建,保存在服务器内存中,通常采用散列表来存储,例如Tomcat的Session实现采用HashMap对象存储属性名和属性值。