目录
3.4.1.2 JwtProperties.java 配置类
3.4.1.3 EmployeeController.java 控制层类
HTTP协议无状态:
为什么我们需要会话跟踪技术,这是因为HTTP协议是一种无状态的协议。所谓无状态,指的是每一次请求都是独立的,下一次请求并不会携带上一次请求的数据。
1.Cookie技术(客户端会话跟踪技术)
1.1 定义
Cookie 是客户端会话跟踪技术,它是存储在客户端浏览器的。
这样我们就可以基于 cookie 在同一次会话的不同请求之间来共享数据。
1.2 执行过程
响应头 Set-Cookie :设置Cookie数据的。
请求头 Cookie:携带Cookie数据的。
以下是详细的执行流程:
-
用户访问网站:
- 用户在浏览器中输入网址或点击链接,请求访问某个网站。
-
服务器响应请求:
- 服务器接收到请求后,生成响应,并可能设置一个或多个 Cookie。(用户名,ID)
- 响应头中包含
Set-Cookie
字段,该字段包含 Cookie 的名称、值以及其他属性(如域、路径、到期日期等)。
-
浏览器存储 Cookie:
- 浏览器接收到响应后,解析
Set-Cookie
头,并将 Cookie 存储在用户的本地设备上。 - 存储的 Cookie 根据其属性(如域、路径、到期日期)进行分类管理。
- 浏览器接收到响应后,解析
-
后续请求携带 Cookie:
- 当用户继续浏览网站或进行其他操作时,浏览器会自动在后续请求中包含相应的 Cookie。
- 请求头中会包含
Cookie
字段,该字段包含之前存储的所有相关 Cookie。
-
服务器处理 Cookie:
- 服务器接收到包含 Cookie 的请求后,会解析
Cookie
头,获取其中的信息。 - 服务器可以根据 Cookie 的内容来识别用户、维护会话状态、提供个性化内容等。
- 服务器接收到包含 Cookie 的请求后,会解析
-
更新或删除 Cookie:
- 在后续的请求和响应中,服务器可以更新 Cookie 的值或属性。
- 如果服务器发送一个带有相同名称但具有更短到期日期的 Cookie,浏览器会更新该 Cookie 并可能在到期后自动删除它。
1.3 三个自动
- 服务器会 自动 的将 cookie 响应给浏览器。
- 浏览器接收到响应回来的数据之后,会 自动 的将 cookie 存储在浏览器本地。
- 在后续的请求当中,浏览器会 自动 的将 cookie 携带到服务器端。
1.4 优缺点
优点:HTTP协议中支持的技术(像Set-Cookie 响应头的解析以及 Cookie 请求头数据的携带,都是浏览器自动进行的,是无需我们手动操作的)。
缺点:移动端APP(Android、IOS)中无法使用Cookie不安全,用户可以自己禁用Cookie,Cookie不能跨域。
1.5 代码实现(浏览器请求和响应状态)
使用代码实现:
@Slf4j
@RestController
public class SessionController {
//设置Cookie
@GetMapping("/c1")
public Result cookie1(HttpServletResponse response){
response.addCookie(new Cookie("login_username","itheima")); //设置Cookie/响应Cookie
return Result.success();
}
//获取Cookie
@GetMapping("/c2")
public Result cookie2(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("login_username")){
System.out.println("login_username: "+cookie.getValue()); //输出name为login_username的cookie
}
}
return Result.success();
}
}
访问c1接口,设置Cookie,http://localhost:8080/c1
设置的cookie,通过响应头Set-Cookie响应给浏览器,并且浏览器会将Cookie,存储在浏览器端。
访问c2接口 http://localhost:8080/c2,此时浏览器会自动的将Cookie携带到服务端。
这样我们就可以基于 cookie 在同一次会