cookie,session,jwt,token

cookie,session,jwt,token

  1. Cookie

    • Cookie 是由服务器发送给客户端的小型数据片段,存储在客户端的浏览器中。

    • 用于在客户端保持用户的会话状态,可以包含诸如用户标识、会话 ID 等信息。

    • 每次客户端与服务器通信时,浏览器会自动在请求中包含相应的 Cookie。

    • Cookie 可以设置过期时间,可以是会话级别的临时 Cookie,也可以是长期保存在客户端的持久性 Cookie。

    • 生成 Cookie:可以使用 HttpServletResponse 对象的 addCookie() 方法来生成 Cookie。

      复制代码
      Cookie cookie = new Cookie("cookieName", "cookieValue");
      response.addCookie(cookie);
    • 获取 Cookie:可以使用 HttpServletRequest 对象的 getCookies() 方法来获取客户端发送的所有 Cookie。

      复制代码
      Cookie[] cookies = request.getCookies();
  2. Session

    • Session 是在服务器端存储的关联特定用户会话的数据结构。

    • 当用户访问应用程序时,服务器会为每个用户创建一个唯一的会话 ID,并将该会话 ID 存储在 Cookie 中,用于标识用户会话。

    • 服务器可以使用会话来存储用户的状态信息,以便在用户与服务器之间的多次请求之间保持用户状态。

    • 生成 Session:在 Java Web 应用中,可以通过 HttpServletRequest 对象来创建或获取 Session。

      复制代码
      HttpSession session = request.getSession();
    • 获取 Session:可以直接通过 HttpServletRequest 对象来获取当前会话的 Session。

      复制代码
      HttpSession session = request.getSession();
  3. JWT (JSON Web Token)

    • JWT 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。
    • JWT 由头部、载荷(Payload)和签名组成,通常以 Base64 编码的字符串形式存在。
    • JWT 是无状态的,信息被加密在 token 内部,因此服务端不需要存储 token 信息。
    • 用户验证成功后,服务端生成一个 JWT 并返回给客户端,客户端在接下来的请求中携带 JWT 来进行身份验证。
  4. Token

    • 在一般情况下,Token 可以指代各种用于身份验证和授权的令牌比如 JWT 就是一种 Token
    • Token 是一种用于访问控制的凭证,用于证明持有者的身份。
    • 通过在每次请求中传递 Token,服务器可以验证用户的身份和权限,而无需依赖服务器端存储用户信息。

区别

  • Cookie 是存储在客户端(浏览器)中的数据,用于在客户端保持用户会话状态;而 Session 数据存储在服务器端。
  • JWT 是一种特定格式的 token,可用于在不同服务之间安全地传输信息,它是无状态的;而一般的 Token 可能是指各种形式的身份验证令牌。
  • Cookie 和 Session 都是基于服务器生成唯一标识来识别用户,而 JWT 则是通过加密 token 内部的信息来验证身份。

在实际应用中,选择何种方式取决于具体需求和安全考虑。CookieSession 更适合传统的 Web 应用,而JWT 更适合分布式系统和前后端分离的应用。

补充: JWT Token

  1. 用户提交登录信息:用户在前端页面输入用户名和密码,然后将其发送给后端服务器。
  2. 后端验证登录信息:后端服务器接收到用户提交的登录信息后,首先进行验证,比如检查用户名和密码是否匹配等。如果验证通过,则继续下一步;否则返回错误信息给前端。
  3. 生成JWT Token:在验证通过后,后端服务器生成一个JWT Token,Token中包含了用户的身份信息以及其他必要的数据,比如用户ID、角色等。可以使用第三方库,如jsonwebtoken来生成JWT Token。
  4. 存储Token到Redis:将生成的Token存储到Redis数据库中。可以使用用户ID作为Key,Token作为Value,设置过期时间等相关配置。
  5. 设置Cookie:后端服务器将生成的Token作为值设置到Cookie中,并设置相关的Cookie属性,如域名、路径、过期时间等。然后将Cookie发送给客户端。
  6. 客户端存储Cookie:浏览器收到后端发送的Cookie后,会自动将Cookie存储在本地。之后,每次客户端向服务器发送请求时,浏览器会自动在请求头中携带该Cookie。
  7. 验证Token:后端服务器在接收到客户端请求时,会从Cookie中获取Token,并解析Token的内容。可以使用相应的JWT库,如jsonwebtoken来验证Token的有效性、完整性,并获取其中的用户身份信息。
  8. 验证Redis中的Token:后端服务器从Redis中获取存储的Token,并与解析出的Token进行比对,确保Token在Redis中没有被篡改或过期。
  9. 身份验证通过:如果Token验证通过且Redis中的Token也验证通过,则说明用户的登录状态有效,可以根据需要进行相应的操作,比如返回用户数据或执行其他业务逻辑。
相关推荐
禾小西3 分钟前
深入理解 Java String:从底层原理到高性能优化实战
java·开发语言·性能优化
渔民小镇7 分钟前
不用前端也能测试 —— 模拟客户端请求模块详解
java·服务器·前端·分布式·游戏
星如雨グッ!(๑•̀ㅂ•́)و✧14 分钟前
Spring WebFlux中DataBufferLimitException异常的解决方案
java·后端·spring
独断万古他化19 分钟前
Selenium 实战 —— 抽奖系统 UI 自动化测试框架搭建
java·selenium·测试工具·ui·自动化·测试
心勤则明22 分钟前
使用 Spring AI Alibaba MCP 结合 Nacos 实现企业级智能体应用
java·人工智能·spring
ruiang27 分钟前
SQL中字符串截取函数(substring)
java
okiseethenwhat36 分钟前
Java 进程 CPU 飙高排查全流程详解
java·开发语言
2601_9498166837 分钟前
使用rustDesk搭建私有远程桌面
java
看见代码就想敲44 分钟前
java学习之(Maven pom.xml 详细讲解)
java·学习·maven