Session & cookie
HTTP连接是无状态的,一个请求发给服务器,服务器发回响应,连接结束。下一次再连接的时候,服务器并不会知道这个客户以前连接过,这样在WEB应用中会出现问题,比如所,在购物车应用中,难道要用户在一个请求中选完所有的商品再结账?好在,我们有其他的方法来保持会话状态,HttpSession对象可以跨越多个请求。
J 下面来看看在servlet中是如何实现的,
HttpSession session = request.getSession();
如果当前的请求信息中带有存储session id的cookie,且该session id对应的session对象存在,则返回该对象。否则,该方法将创建新的session对象,并且将生成的session id作为cookie通过响应存到浏览器端。
这行代码隐含帮我们做了很多事情:
1:new HttpSession对象
2:产生唯一的session ID
3:new Cookie对象
4:将session ID和这个cookie对象绑定
5:通过response设置响应信息头,将这个cookie加入其中
另外getSession的重载版本getSession(false)在请求信息中无储存session id的cookie时,这个方法返回null。
J 如果在浏览器端禁用了cookie,那么session id也就没地方存放了,即HttpSession session = request.getSession();并不会写入新的cookie对象到客户端。使用URL rewriting可以解决这个问题,只要在调用response.encodeURL(aURL)就可以了,它会自动的在原来URL的最后加上;jsessionid=….
转载于:https://blog.51cto.com/robbietree/289647