1.会话管理概念
HTTP是一种无状态协议,每次客户端访问web页面时,客户端打开一个单独的浏览器窗口连接到web服务器,由于服务器不会自动保存之前客户端请求的相关信息,所有无法识别一个HTTP请求是否为第一次访问。这就引进了web客户端和服务器端之间的会话,这就是会话管理。
2.Cookies
Cookies是存储在客户端计算机上的文本文件,其中保留了各种跟踪信息。

在Servlet中操作Cookie:
1.通过Servlet设置Cookie
//创建一个Cookies对象
Cookie cookie = new Cookes("key","value");
//设置最大生存周期
cookie.setMaxAge(60*60*24);
//发送Cookie到HTTP响应头
response.addCookie(cookie);
2.通过Servlet读取Cookie
①通过HTTPServletRequest的getCookies()方法创建一个javax.servlet.http.Cookie对象的数组
②循环遍历数组
③使用getName()和getValue()方法来访问每一个cookie和关联的值
3.通过servlet删除Cookie
//把cookie最大生命周期设置为0
cookie.setMaxAge(0);
//添加到响应头
response.addCookies(cookie);
3.Cookie的局限性
①cookie可能被浏览器禁用
②cookie保存在客户端,可能被删除
③大小受限制
④安全性不高存储形式是存文本类型,信息不安全
4.Session
4.1Session简介
- Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。
- Session的工作原理:服务器在创建会话对象时,会为其分配一个唯一的会话标识——SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求中,服务器通过读取Cookie中的JSESSIONID属性值来识别不同的用户,从而实现对每个用户的会话跟踪。

2.Cookie和Session主要的区别:
①Cookie是把用户的数据写给用户的浏览器。
②Session技术把用户的数据写到服务器中用户独占的session中。
4.2获取HttpSession对象
HttpServletRequest接口提供了获取HttpSession对象的方法:
方法 |
描述 |
getSession() |
获取与客户端请求关联的当前的有效的Session,若没有Session关联则新建一个 |
getSession(boolean create) |
获取与客户端请求关联的当前的有效的Session,若没有Session关联,当参数为真时,Session被新建,为假时,返回空值 |
4.3HttpSession接口的方法
HttpSession接口提供了存取会话域属性和管理会话生命周期的方法:
方法 |
描述 |
void setAttribute(String key,Object value) |
以key/value的形式将对象保存在HttpSession对象中 |
Object getAttribute(String key) |
通过key获取对象值 |
void removeAttribute(String key) |
从HttpSession对象中删除指定名称key所对应的对象 |
void invalidate() |
设置HttpSession对象失效 |
void setMaxInactiveInterval(int interval) |
设定HttpSession对象的非活动时间(以秒为单位),若超过这个时间,HttpSession对象将会失效 |
int getMaxInactiveInterval() |
获取HttpSession对象的有效非活动时间(以秒为单位) |
String getId() |
获取HttpSession对象标识sessionid |
long getCreationTime() |
获取HttpSession对象产生的时间,单位是毫秒 |
long getLastAccessedTime() |
获取用户最后通过这个HttpSession对象送出请求的时间 |
4.Session存取数据
//存储会话域属性
session.setAttribute("username"," huaqing ");
//会话域中获取属性值
String uname = (String)session.getAttribute("username");
//会话域中删除属性
session.removeAttribute("username");
5.Session生命周期
①Session失效时间
session具有一定声生命周期,如果session超过会话的最大不活动时间,会话自动失效,会话的最大不活动时间指会话超过此时间段不进行任何操作;
②设置Session的失效时间
//方法1:在工程的web.xml中配置session的生命周期,单位为分钟;
<session-config> <session-timeout>15</session-timeout> </session-config>
//方法2:在程序硬编码设置
session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期;
//方法3:在Tomcat安装目录下conf/web.xml中配置(Web容器级别)
<session-config> <session-timeout>15</session-timeout> </session-config>
③手动销毁Session
可以通过调用invalidate()方法立即清除会话对象及其所有会话域属性,同时响应客户端浏览器清除Cookie中的JSESSIONID,在实际应用中,此方法多用来实现系统的“安全退出”功能。
6.Session和Cookie的区别
①cookie数据保存在客户端(分担了服务器端的压力),大小有限制,还可能被用户禁用。锦上添花的功能保存在cookie中。
②session数据保存在服务器端(服务器的压力大,不是非常重要的信息不保存)。数据永远可用,(不会因为cookie被禁用而影响)