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也验证通过,则说明用户的登录状态有效,可以根据需要进行相应的操作,比如返回用户数据或执行其他业务逻辑。
相关推荐
胖咕噜的稞达鸭36 分钟前
自定义shell命令行解释器自制
java·开发语言
q***33374 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
Y***h1877 小时前
第二章 Spring中的Bean
java·后端·spring
8***29317 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger7 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***06298 小时前
Tomcat的升级
java·tomcat
多多*8 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交8 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
d***81728 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
ᐇ9598 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐