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也验证通过,则说明用户的登录状态有效,可以根据需要进行相应的操作,比如返回用户数据或执行其他业务逻辑。

在这里插入图片描述

在这里插入图片描述

上一篇:虚拟现实(VR)项目的开发工具


下一篇:数据结构 第7章 查找(一轮习题总结)-7.2 顺序查找和折半查找