cookie/session/token/jwt

一、Cookie

  • 定义: Cookie 是服务器发送到用户浏览器存储在本地的小型数据片段,用于在客户端存储会话信息。

    • Cookie是Web服务器发送给浏览器的一小段数据,浏览器之后在每次请求同一服务器时会将这段数据回传。Cookie的主要作用是维持用户状态,例如存储登录信息或用户偏好设置。

  • 应用场景: 用于在客户端存储用户的会话状态,如用户登录状态、购物车内容等

    • 用户认证:存储用户会话标识。

    • 用户偏好:如网页字体大小、页面布局等个性化设置。

    • 购物车:在不登录的情况下临时保存用户的购物车信息。

  • 实现方式: 通过HTTP响应头Set-Cookie设置Cookie,浏览器在后续请求中通过Cookie请求头携带这些数据。

  • 示例代码(设置Cookie):

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
​
HttpServletResponse response = ...;
Cookie cookie = new Cookie("username", "JohnDoe");
cookie.setMaxAge(1*60*60); // 秒 设置有效期为1小时
response.addCookie(cookie);

二、Session

  • 定义: Session 是存储在服务器上的用户会话信息,通过唯一的会话标识符来关联客户端请求和用户数据。

    • Session是在服务器端为每个用户创建的一种会话状态,用来跟踪用户的状态信息。每个Session都有一个唯一的Session ID来标识。

  • 应用场景: 用于存储和管理大量和敏感的用户数据,如用户权限、购买历史等

    • 用户身份验证:存储登录状态,权限信息。

    • 跨页面数据共享:在不同请求间传递数据。

  • 实现方式: 服务器为每个新用户分配一个Session,并生成一个唯一Session ID,此ID通常通过Cookie发送给客户端,客户端后续请求时携带此ID,服务器根据ID找到对应的Session。

  • 示例代码(Servlet中使用Session):

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
​
// 获取或创建用户的 Session
HttpSession session = request.getSession();
​
// 向 Session 存储用户信息
session.setAttribute("username", "JohnDoe");

三、Token

  • 定义: Token 是用于身份验证或授权的通用术语,可以是基于 Cookie 的会话标识符或更复杂的安全令牌。

  • 应用场景: 用于确认用户身份,在不同系统或服务之间进行传递和验证。

  • 实现方式:

    在实际应用中,Token 可以是各种形式,包括基于 JWT 的安全令牌。

四、JWT ( JSON Web Token)

  • 定义: JWT 是一种基于 JSON 格式的安全令牌,用于在客户端和服务器之间安全地传递信息。

    • JWT是一种紧凑、自包含的方式,用于在各方之间安全地传输信息。它是一个JSON对象,经过加密后可以被信任。常用于认证和授权场景。

  • 应用场景:

    • 用户认证:代替传统的Session机制,实现无状态认证。

    • API访问控制:确保API请求来自合法用户。

  • 实现方式: JWT由三部分组成:Header、Payload、Signature。通过指定算法对前两部分进行签名,以保证数据的完整性和来源的可靠性。

  • 示例代码(使用jjwt库生成JWT):

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
​
String secretKey = "yourSecretKey";
long validityInMilliseconds = 3600000; // 有效期1小时
​
// 生成JWT
String token = Jwts.builder()
        .setSubject("JohnDoe") // 主题,可以是用户ID或其他标识
        .claim("role", "admin") // 自定义声明
        .setIssuedAt(new Date(System.currentTimeMillis())) // 发布时间
        .setExpiration(new Date(System.currentTimeMillis() + validityInMilliseconds)) // 过期时间
        .signWith(SignatureAlgorithm.HS256, secretKey) // 签名算法和密钥
        .compact(); // 压缩成字符串形式

五、jwt和token关系

  • JWT(JSON Web Token)是一种具体的Token实现方式。换句话说,Token是一个更广泛的概念,而JWT是Token的一个子集,专注于通过JSON格式安全地传输信息。

  • Token,一般而言,是指在计算机安全领域中用于验证身份、授权访问或传递信息的一种加密字符串。Token可以有多种实现形式和标准,比如OAuth Tokens、API Tokens等,它们各有不同的结构和应用场景。

  • JWT (JSON Web Token) 是一种基于JSON的开放标准(RFC 7519),用于在双方之间安全、高效地传递信息。JWT主要由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。它设计得足够紧凑,可直接在网络中传输,且由于其签名机制,能够在不查询数据库的情况下验证Token的有效性及完整性,非常适用于分布式系统的认证和授权场景。

  • 因此,当人们谈论“Token”时,可能指代任何形式的认证或信息传递令牌;而提到JWT时,特指遵循JWT标准的这种特定类型的Token。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伏颜.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值