【接口】HTTP(4)|Session、Cookie、token有什么区别?

HTTP是一种无状态的协议,服务器本身没有记忆功能,无法记住客户端之前是否有发送过请求,因此客户端每次发送的请求都是独立的

无状态:HTTP是一个无状态的协议。这句话里的无状态是什么意思? - 知乎

1、为什么需要cookie?

首先http是一种无状态的协议,需要让业务之间有关联,就需要cookie这门技术,让业务页面之间有数据传递。

cookie是一门客户端技术,一般由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...在项目中比较常见的有:1、登录记住用户名 2、记住用户浏览记录...

2、session生成方式?

浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid.

然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。

这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;

还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

session是放到cookie里面,请求头里面携带

3、为什么会有token的出现? 

首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;

而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

token不一定放到cookie里面,可以放到请求体/请求参数里面;有的项目不需要把token放到cookie中

4、token的生成方式?

浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;

客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

5、token和session的区别?

token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;

session服务器会保存一份,可能保存到缓存,文件,数据库;

同样,session和token都是有过期时间一说,都需要去管理过期时间;

其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。 而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

方案 A (session):我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。

方案 B(token) :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。

6、cookie和session token的联系:

  1、session可以通过Cookie实现,也可以不通过

  2、token也可以通过Cookie实现,也可以不通过

  3、Cookie+session一般都搭配做认证,Cookie是放在浏览器中的,session 是保存在服务端的数据库中的

  4、由于Cookie一般是和域名绑定的,一般很少和token搭配

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TokenCookieSession 都是用于在客户端和服务器之间传递信息的方式,但是它们在实现和应用场景上有所不同。 1. TokenToken 是一种轻量级的身份验证和授权机制,通常使用 JWT(JSON Web Token)格式进行编码和传递。Token 是一种无状态的机制,不需要在服务器端保存任何信息,而是将认证和授权的信息编码为 Token,发送给客户端保存。客户端在后续请求中携带 Token,服务器接收到请求后解码 Token,以验证用户身份和请求权限。由于 Token 的无状态特性,使得它可以被广泛使用于分布式系统中。 2. CookieCookie 是一种在客户端保存数据的机制,它是通过在客户端的浏览器中存储一些数据来实现的。Cookie 通常用于维持用户的会话状态,比如用户登录后,在后续的请求中都会带上 Cookie 信息,以便服务器判断用户的身份和请求权限。Cookie 存在一些安全性问题,比如可以被窃取和篡改,因此需要采取一些安全措施,比如使用 HTTPS 协议传输。 3. SessionSession 是一种在服务器端保存用户会话信息的机制。当用户第一次访问服务器时,服务器会为用户创建一个 Session,生成一个 Session ID,并将 Session ID 保存在 Cookie 中,发送给客户端。客户端在后续请求中携带 Session ID,服务器接收到请求后根据 Session ID 获取用户的会话信息。Session 可以保存一些敏感信息,比如用户的登录状态、购物车信息等,因此需要采取一些安全措施,比如对 Session ID 进行加密和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨撕酒家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值