文章目录
Servlet-Cookie与Session
1lombok包
可以快速生成get和set方法,让代码更简洁
在maven中引入依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
通过注解生成get与set方法
@Data 生成get和set方法
@NoArgsConstructor 无参构造
@AllArgsConstructor 全参构造
2 会话管理
http是无状态的,这个时候我们可能需要在服务端获取到当前操作用户的信息,在这个时候,我们通过会话来实现和同一个客户端交互的时候多次请求共享一些数据
3 Cookie
3.1 获取方法
Cookie[] cookies = req.getCookies();
3.2 设置Cookie
Cookie cookie = new Cookie(name,value);
resp.addCookie(cookie);
3.3 Cookie的过期时间
默认浏览器关闭后销毁
可以指定过期时间
Cookie cookie = new Cookie("token", "这是我们访问系统的凭证");
// 指定过期时间,单位秒
cookie.setMaxAge(2 * 60 * 60);
3.4 Cookie的作用范围
作用范围是域名+path
可以指定域名和path属性
Cookie cookie = new Cookie("token", "这是我们访问系统的凭证");
// 指定项目前缀
cookie.setPath("/");
// 指定域名
cookie.setDomain();
可以通过设置httpOnly属性来让这个Cookie只能用于http传输,客户端(浏览器)不能去操作它
4 Session
4.1 怎么获取
HttpSession session = req.getSession();
4.2 向Session域中添加数据
setAttribute
getAttribute
removeAttribute
注意: 所有的域都可以使用这三个API
4.3 Session的过期时间
服务器关闭销毁
默认30分钟销毁
指定过期时间,在web.xml
<session-config>
<!--2个小时-->
<session-timeout>120</session-timeout>
</session-config>
4.4 Session客户端失效
session需要和cookie配合使用,如果cookie失效了客户端也无法对应服务端。在这里服务端会自动向客户端写JSESSIONID,我们手动写入JSESSIONID,并指定过期时间
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(2*60*60);
cookie.setHttpOnly(true);
resp.addCookie(cookie);
5 Cookie与Session比较
5.1 cookie
是客户端会话技术,数据是存在浏览器中的
每次发送请求的时候会携带cookie
在服务端可以通过req.getCookies()获取cookie
服务端也可以通过resp.addCookie()向客户端写入cookie(原理:响应头的set-cookie会被浏览器解析,将对应的内容存放到客户端)
5.2 session
是服务端的会话技术,数据是存在服务端的
session的实现需要结合cookie,
每次创建session的时候会生成一个sessionId,
服务端会将这个sessionId写入到客户端的cookie中(JSESSIONID),
客户端每次发送请求的时候,会带上cookie,服务端就根据JSESSIONID找到对应的session