我的Java之旅 第七课 JAVA WEB 会话管理
1、隐藏域
隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果。
2、Cookie
Cookie类
setMaxAge() 设置有效期,单位秒。如果不设置有效期,则关闭浏览器后失效。
request.getCookies()取得Cookie,返回Cookie类型数组。
cookie.getName();cookie.getValue() 取得cookie的key和value值。
cookie.setHttpOnly() 不被客户端脚本读取。
cookie.isHttpOnly() 是否被标识为仅用于HTTP。
3、URL中记录信息,如分页,查询条件等。
4、HttpSession 会话管理
HttpSession非线程安全,需要注意共享存取问题。
request.getSession() 取得session对象。
session.setAttribute()和 session.getAttribute()
session.invalidate() 使session失效
Session原理
每个Session对象都有一个唯一ID,称为SessionId。getId()可以取得。这个Id默认会通过Cookie存储在浏览器中,当再次请求时,浏览器会同数据一起发回服务器,这样,服务器就可以区分不同
浏览器(客户端)在服务器存储的数据了。浏览器存储SessionId的Cookie默认是关闭浏览器就失效,所以已登录的网站当浏览器全关再打开时,会丢掉登录状态。在这里,看似Session数据也没有了,其实
服务器端的数据还在,只是SessionId没有了,所以,Session数据是要定期清理的(设置失效)。
可以执行HttpSession的setMaxInactiveInterval() 设定浏览器多久没有请求的话,自动失效。单位是秒。也可以在web.xml中设置,但单位是分钟。
当浏览器被禁用Cookie时,如果仍要使用Session记录状态,就必须借助URL来记录SessionId了。