HttpSession session = request.getSession();
session实现原理:
1.session的列表是Map,session列表的key是id,value是session对象.
2.当浏览器第一次向服务器发送请求时,服务器生成session对象,并且生成sessionID,并且将该session的id发送到浏览器,
3.当浏览器发送第二次请求时,会拿出浏览器缓存中的id,发送到服务器,服务器会根据这个id值来找到session对象.
4.关闭浏览器,内存消失,cookie消失,sessionId消失,会话等同于结束.
cookie被禁用,session机制还能实现吗?
可以找到,根据URL重写机制可以实现
http://localhost:8080/servlet12/test/session;jsessionid=19D1C99560DCBF84839FA43D58F56E16
URL重写机制会提高开发者的成本。开发人员在编写任何请求路径的时候,后面都要添加一个sessionid,给开发带来了很大的难度,很大的成本。所以大部分的网站都是这样设计的:你要是禁用cookie,你就别用了。
request(对应的类名:HttpServletRequest)请求域(请求级别的)
session(对应的类名:HttpSession) 会话域(用户级别的)
application(对应的类名:ServletContext) 应用域(项目级别的,所有用户共享的)
这三个域对象的大小关系 :request < session < application
他们三个域对象都有以下三个公共的方法:
1.setAttribute(向域当中绑定数据)
2.getAttribute(从域当中获取数据)
3.removeAttribute(删除域当中的数据)
使用原则:尽量使用小的域。