目录
会话技术
会话跟踪方案对比
Cookie-toc" style="margin-left:80px;">方案一:Cookie
实现思路
具体代码
优点
缺点
Session-toc" style="margin-left:80px;">方案二:Session
实现思路
具体代码
优点
缺点
方案三:令牌技术(主流方案)
实现思路
优点
缺点
会话技术
- 会话:用户打开浏览器,访问web服务的资源,会话建立,直到一方断开连接,会话结束。在一次会话中包含多次请求和响应。
- 会话跟踪:一种维护浏览器状态的方法,浏览器需要识别多次请求是否来源于同一个浏览器,以便在同一次会话的多次请求之间共享数据。
- 会话跟踪方案
会话跟踪方案对比
-
Cookie">方案一:Cookie
-
实现思路
-
具体代码
-
package com.example.tlias.controller; import com.example.tlias.pojo.Result; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class SessionController { @GetMapping("/c1") // todo 设置Cookie public Result cookie1(HttpServletResponse response) { response.addCookie(new Cookie("login_name", "hkm")); return Result.success(); } @GetMapping("/c2") // todo 获取Cookie public Result cookie2(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if (cookie.getName().equals("login_name")) { System.out.println("login_name:" + cookie.getValue()); } } return Result.success(); } }
-
访问c1运行结果如下
-
访问c2运行结果如下
-
-
Session">方案二:Session
-
实现思路
-
具体代码
-
package com.example.tlias.controller; import com.example.tlias.pojo.Result; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class SessionController { // todo 在HttpSession中设置session对象的值 @GetMapping("/s1") public Result Session1(HttpSession session) { log.info("HttpSession:{}", session.hashCode()); session.setAttribute("loginUser-s1","hkm");// 往Session对象中存储 return Result.success(); } @GetMapping("/s2") // todo 获取=session对象的值 public Result Session2(HttpServletRequest request) { HttpSession httpSession = request.getSession(); log.info("HttpSession-s2:{}", httpSession.hashCode()); Object loginUser = httpSession.getAttribute("loginUser"); log.info("loginUser:{}", loginUser); return Result.success(loginUser); } }
- 访问s1运行结果如下:
-
访问s2运行结果如下
-
-
优点
- 数据存储在服务端,安全
-
缺点
-
-
方案三:令牌技术(主流方案)