jsp中使用URL重写跟踪Session,浏览器不支持Cookie的解决方案

大家都知道session关浏览器就会清除(即使sessionid会写到客户端的cookie中),如果浏览器新建一个父窗口,在原窗口不关闭的情况下,共享一个sessionId。在一次会话中,session是基于cookie的,也就是说当cookie被删除时,session又会创建。当客户端禁掉cookie时,就要通过URL重写获取sessionId,且sessionId不会改变。

HttpServletResponse接口提供了encodeURL(String url)实现URL地址重写。例如:
<a href=”<%= response.encodeURL(“index.jsp?c=1&wd=Java”) %>”>Homepage</a>


该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动输出来。如果客户端不支持Cookie,则会将用户Session的ID重写到URL中。重写后的输出可能是这样的:

http://localhost:8080/xxx/index.jsp;jsessionid=091A82E070579D3FA881FE901E532422?c=1&wd=Java
其中jsessionid后面跟的就是session.getId()的值,这样session就可以使用了。


清掉request携带的所有cookie

Cookie[] cookies = request.getCookies();
for(int i = 0; i < cookies.length; i++){
   cookies[i].setMaxAge(0);
   response.addCookie(cookies[i]);
}

你可能感兴趣的:(jsp,session,cookie,url重写)