Session 表示通话,会话,对话期间的意思.
会话:是指一个浏览器窗口打开到关闭这个期间.
Session原理:
服务器可以为客户端创建并维护一个Session对象,用于存放数据.在创建Session对象的同时,服务器将会为该Session对象产生一个唯一的编号,这个编号称之为SessionID,服务器以Cookie的方式将SessionID存放在客户端.
创建Session :
HttpSession session = request.getSession( Boolean);
如果boolean为true:如果有session就得到,没有就新创建.不写就默认为true.
如果boolean为false:如果有就得到Session,没有就为null;
HttpSession接口:
- setAttribute(String,Object):在Session对象中用一个名字绑定一个对象.
- getAttribute(String):通过名字获取Session对象中保存的对象;
- removeAttribute(String):在Session对象中保存的对象.
- getCreationTime():返回第一次创建会话的时间.
- setMaxInactiveInterval(int interval):对于会话指定客户请求的最大间隔时间.
- getMaxInactiveInterval(int interval):返回客户请求的最大间隔时间
- invalidate():会话结束.当前存在在会话中的所有会话属性也解除绑定.
- getId():此方法返回每个Session唯一的标识
一般情况:
Session都是储存在内存里,当服务器进程被停止或重启的时候,内存里的Session也会被清空,但有一点是明确的,Session对象占用着系统资源.
会话超时管理:
会话的销毁:
- 设置会话超时:
setMaxInactiveInterval(int interval):以秒为单位
可以在web.xml中配置:
<session-config>
<session-timeout>14</session-timeout>
</session-config>
是以分钟为单位
- 在Session对象上调用invalidate()方法
- 应用结束(崩溃或者取消部署)
注意:
session对象是保存在服务器端,浏览器关闭时并不意味着Session对象被删除.
URL重写:
当cookie被客户禁止后,容器就回求助于URL重写,对HTTP响应中发送的所有URL完成编码.
显示使用了URl编码后,容器会首先尝试使用cookie完成会话管理,只有当cookie方法失败后才会URL重写
当向客户返回第一个响应时候,会同时尝试使用cookie和URL重写两种方法.