虽然Session是保存在浏览器中的,对客户端是透明的,它的运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookies作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookies,它的值为该Session的id(也就是HttpSession.getId()的返回值),Seesion依据该Cookies来识别是否为同一个用户。
该Cookie为服务器自动生成。同一个电脑的不同浏览器会生成不同的session。
如果客户端浏览器将Cookie功能禁用或者客户端浏览器不支持cookie,JavaWeb应用提供了一种解决方案:URL地址重写。
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,例如:
<a href="<%=response.encodeURL("/index.jsp")%>">index.jsp</a>
如果是页面重定向URL,URL地址重写应该这样写:
response.encodeRedirectURL(httpServletRequest.getRequestURI())