5、会话技术

会话技术

HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的,服务器无法知道连接是否来自于同一个客户端。会话技术就是为了解决这个问题,通俗来讲,为了证明你就是你

客户端会话技术:Cookie

服务器端会话技术:Session

Cookie

常用方法

// 创建Cookie对象
Cookie cookie = new Cookie("name", "tom");
 
// 添加Cookie
response.addCookie(cookie);
 
// 获取Cookie
Cookie[] cookies = request.getCookies();
 
// 遍历容器
for (Cookie cookie : cookies) {
    System.out.println(cookie.getName() + "=" + cookie.getValue());
}

Cookie对象的生命周期

会话跟踪的发起端是服务器

默认情况下浏览器关闭就销毁,浏览器获得服务器响应后获得Cookie,只要不关闭就存在

设置Cookie对象生命时长

cookie.setMaxAge(seconds);
方法参数

cookie的携带范围

1、默认情况下,访问当前项目下(同一域名)的任何资源,都会携带cookie

2、设置携带范围

cookie.setPath(String path);
//只有访问这一个资源的时候,才会携带cookie
setPath("具体的资源路径")
//只要是该服务器下所部署的项目,访问资源的时候都可以携带cookie
setPath("/")

Session

Tomcat下Session和Cookie的使用流程

常用方法

//根据请求的Cookie获取Session对象,如果不存在则创建新的Session
HttpSession session = request.getSession();
// 根据请求的Cookie获取Session对象,如果不存在则返回null
HttpSession session = request.getSession(false);

// 向session域对象中存储数据
session.setAttribute("key", object);
// 从session域对象中获取数据
Object obj = session.getAttribute("key");
// 从session中删除数据
session.removeAttribute("key");

生命周期

如果浏览器关闭,服务器没有关闭

Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(seconds);
response.addCookie(cookie);

如果浏览器不关闭,服务器关闭的话

Session的钝化和活化

Session对象的销毁方式

1、关闭服务器

2、调用session.invalidate();方法

Session的生命时长

Session的生命时长,默认30分钟,Tomcat会开启一个后台线程每隔段时间检查Session的有效性,并删除过期的Session。

int getMaxlnactivelnterval() ,获取Session过期时间,返回值以为单位。

<session-config>
    <session-timeout>minutes</session-timeout>
</session-config>