Servlet-Cookie与Session

本文介绍了Servlet中Cookie和Session的使用,包括它们的获取、设置、过期时间和作用范围。Cookie是客户端会话技术,数据存储在浏览器,每次请求都会携带;而Session是服务器端技术,数据存储在服务器,通过sessionId在客户端和服务器间建立会话。同时,讨论了两者的比较及如何实现客户端失效处理。
摘要由CSDN通过智能技术生成

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是无状态的,这个时候我们可能需要在服务端获取到当前操作用户的信息,在这个时候,我们通过会话来实现和同一个客户端交互的时候多次请求共享一些数据

image.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值