网络请求中,token和cookie有什么区别?

1.cookie和session

  • cookie用于登录验证,存储用户标识(如userID)
  • session在服务端,存储用户详细信息,和cookie信息一一对应
  • cookie+session是常见的登录验证解决方案
    在这里插入图片描述

1.1cookie的格式是什么样子?

Cookie的格式一般是一个字符串,由一些键值对组成,键值对之间使用分号加空格("; ")分隔,每个键值对的格式一般是“键=值”,例如:

name=value; expires=date; path=path; domain=domain; secure

其中常见的键包括:

name:Cookie的名称,也就是键
value:Cookie的值
expires:Cookie的过期时间
path:Cookie的作用路径
domain:Cookie的作用域
secure:Cookie是否只能通过HTTPS连接传输
例如,下面是一个名为“username”的Cookie:

username=johndoe; expires=Thu, 01 Jan 2022 00:00:00 GMT; path=/

1.2 session的格式是什么样子

Session 是一种服务器端的存储机制,具体格式和实现方式可以有很多种。通常情况下,服务器端会将每个用户的 Session 数据存储在一个键值对中,并分配一个唯一的 Session ID 作为这个键值对的 key,value 则存储着与这个 Session 相关联的数据。在客户端,通常是通过 cookie 来存储这个 Session ID,然后每次发起请求时将这个 Session ID 带到服务器端,让服务器端能够找到对应的 Session 数据。

所以,Session 的具体格式和实现方式很大程度上取决于具体的服务器端技术和框架。在一些 Web 开发框架中,比如 Express.js,Session 的格式可能类似于下面的代码示例:

{
  "session_id": "k3j4g2f6h5d3n4s4",
  "user_id": "123456",
  "user_name": "Alice",
  "user_email": "alice@example.com",
  "user_phone": "1234567890",
  "user_address": "123 Main St",
  // ... 其他与用户相关的数据
}

这个示例中,session_id 是 Session 的唯一标识,user_id、user_name、user_email、user_phone、user_address 等字段则存储着与用户相关的数据。不同的应用场景下,Session 数据的格式和字段可能会有所不同。

2.什么是JWT?

广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个加密了的token字符串。

JWT(JSON Web Token)是token的技术术语,可以取代session + cookie,用于做用户登录校验

3.JWT特点:

JWT无需存储在服务器(不使用Session/Cookie),不占用服务器资源(也就是Stateless无状态的),也就不存在多服务器共享Session的问题

4.什么时候应该使用 JSON Web Tokens?

以下是 JSON Web Tokens 有用的一些场景:

  • 授权:这是使用 JWT 最常见的场景。用户登录后,每个后续请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是如今广泛使用 JWT 的一项功能,因为它的开销很小并且能够轻松跨不同域使用。
  • 信息交换:JSON Web Tokens 是在各方之间安全传输信息的好方法。因为 JWT 可以签名——例如,使用公钥/私钥对——你可以确定发送者是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否未被篡改。

5.什么是 JSON Web Token 结构?

在其紧凑的形式中,JSON Web Tokens 由三部分组成,由点 ( .) 分隔,它们是:

  • 标头
  • 有效载荷
  • 签名

因此,JWT(加密之后的字符串) 通常如下所示。

xxxxx.yyyyy.zzzzz

在这里插入图片描述

6.JWT的用法:

6.1JWT的生成与解析:

const jwt = require('jsonwebtoken');

// 生成JWT Token
const payload = { username: 'alice', userId: '123456' };
const secretKey = 'my-secret-key';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log('JWT Token:', token);

// 解析JWT Token
jwt.verify(token, secretKey, (err, decoded) => {
  if (err) {
    console.error('Invalid Token:', err);
    return;
  }
  console.log('Decoded Token:', decoded);
});

还记得我们说过JWT由三部分组成:Header、Payload和Signature。它们分别对应了JWT的三个组成部分,即头部、负载和签名。

在上面的代码中,Header是由jsonwebtoken自动生成的,默认包含算法和token类型等信息。Payload是用来携带信息的,可以在其中添加任何自定义的信息,例如上面的例子中的用户名和用户ID。Signature是用于验证token是否被篡改的,它由Header、Payload以及secretKey共同生成,保证了token的完整性和真实性。

6.2在 HTTP 请求中,携带Token

在 HTTP 请求中,可以在请求头中添加 Authorization 字段,将 Token 附加在请求中发送给服务端。

使用简单,用户在登录成功拿到 Token后,一般访问需要权限的请求时,在Header附上Token即可。

例如,在使用 Axios 发送请求时,可以通过配置 headers 的方式附加 Token:

axios({
  method: 'get',
  url: 'http://example.com/api',
  headers: {
    Authorization: 'Bearer ' + token // 在 Token 前添加 "Bearer ",符合 JWT 的规范
  }
});

在服务端接收到请求后,可以在请求头的 Authorization 字段中获取 Token。

7.Token与Cookie-Session的区别:

Token与Cookie-Session都是用于用户认证和授权的方式,但它们有以下几个区别:

  1. 存储位置:Cookie-Session是将信息存储在服务器端,而Token则是将信息存储在客户端。
  2. 信息内容:Cookie-Session中包含的信息比Token要多,包括用户身份、会话状态等。而Token通常只包含用户身份的唯一标识信息。Token只是一个令牌,包含了用户的身份信息,如用户ID、角色等等,一般不会包含敏感信息。
  3. 安全性:Cookie-Session容易受到跨站点脚本攻击(XSS)和跨站点请求伪造(CSRF)等安全问题的影响,而Token则使用签名和加密等技术保证信息的安全性。
  4. 扩展性:Token具有很好的扩展性,支持多种认证和授权方式,而Cookie-Session则相对局限。

综上所述,Token相比Cookie-Session在安全性和扩展性上具有优势,因此在实际开发中被广泛使用。

为什么Cookie-Session中包含的信息比Token要多?

Cookie-Session中包含的信息比Token要多的原因是,Cookie-Session是在服务器端维护的,所以可以在服务器端存储任意数据,包括用户的各种信息,比如用户名、密码、邮箱、手机号码、地址等等,而Token只是一个令牌,包含了用户的身份信息,如用户ID、角色等等,一般不会包含敏感信息。另外,由于Cookie-Session是基于Cookie实现的,所以还可以设置Cookie的各种属性,比如过期时间、域名、路径、安全标识等等。

为什么要用token取代cookie-session?

使用 Token 取代 Cookie-Session 的主要原因是为了提高应用程序的可扩展性和安全性。

首先,使用 Token 能够降低服务器的负载。在使用 Cookie-Session 时,服务器必须为每个客户端维护一个 session。如果客户端的数量很大,服务器需要为所有这些 session 分配大量的内存,这将增加服务器的负载。相比之下,使用 Token 不需要在服务器端维护 session,因此可以减少服务器的负载,提高应用程序的可扩展性。

其次,使用 Token 能够提高应用程序的安全性。在使用 Cookie-Session 时,session 存储在客户端的 Cookie 中,如果攻击者能够窃取这些 Cookie,就可以获得用户的身份验证信息。而使用 Token 可以防止此类攻击。Token 只存储在客户端,不会存储在服务器上,因此攻击者无法窃取用户的身份验证信息。

总之,使用 Token 取代 Cookie-Session 能够提高应用程序的可扩展性和安全性,是一种更加现代化的身份验证方法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值