那么我们在登录校验的时候,常常遇到的问题是,登陆后才能访问接下来的页面,不登陆是无法访问的,那么拦截请求是如何判断用户是否登录成功的呢,这里我们就讲到一个技术叫做会话技术
会话技术
概述:就是浏览器与服务器之间的一次链接,中键可以有多次请求与响应,我们就称之为一次会话。
Cookie
1.浏览器向服务器发送请求
2.服务器会向客户端发送一个响应头 Set-Cooking:key=value
3.浏览器会把Cookong保存到本地,并在后面每次请求时带着请求头 Cooking:key=value
代码实现
@GetMapping("/c/send")
public Result send(HttpServletResponse response){
Cookie cookie =new Cookie("username","zhangsan");
response.addCookie(cookie);
return Result.success();
}
@GetMapping("/c/get")
public Result get(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if (cookies !=null && cookies.length>0){
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
}
return Result.success();
}
Session
1.浏览器向服务器发送请求
2.服务器会根据客户端的请求,判断有没有对应的Cookie请求偷,如果没有的话,创建一个Session,并且返回一个名字叫JESSIONID 的Cookie; 如果有,直接获取Session,由服务器维护
3.浏览器每次都会带着请求偷JSESSIONID
@GetMapping("s1")
public Result s1(HttpServletRequest request){
HttpSession session = request.getSession();
System.out.println("s1" +session.getId());
return Result.success();
}
@GetMapping("s2")
public Result s2(HttpServletRequest request,HttpSession session){
HttpSession session1 = request.getSession();
System.out.println("session1" +session1.getId());
HttpSession session2 = request.getSession();
System.out.println("session2" +session2.getId());
System.out.println(session1==session2);
System.out.println(session.getId());
Object value = session2.getAttribute("sessionKey");
System.out.println(value);
return Result.success();
}