查看原文
其他

懂了这个知识点,可以少很多撕逼

刘大大 产品刘 2022-10-16

之前写过一篇文章,是说明cookie和session的,今天给大家介绍另外一个重要的知识点token,并让大家彻底搞懂cookie、session、token的区别,废话不多说,直接上干货。


什么是token

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位,无需再次带上用户名和密码。

最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。


为什么会产生token

我们都是知道HTTP协议是无状态的,这种无状态意味着程序需要验证每一次请求,从而辨别客户端的身份。

在这之前,程序都是通过在服务端存储的登录信息来辨别请求的。这种方式一般都是通过在cookie中存储Session ID来完成。

已经移动端的兴起,这种验证的方式逐渐暴露出许多问题:

a、Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,服务端的内存开销也会越来越大。

b、可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。

c、CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。

d、CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。

在这些问题中,可扩展性是最突出的,因此token的使用就应用而生了。


cookie、session、token的定义及区别

cookie

Cookie是服务器给客户端发的一个「通信证」。

cookie是浏览器访问服务器以后,服务器传给浏览器的一段数据。客户端浏览器把cookie保存起来,不轻易删除,下次请求同一网站再发送给服务器。

session

a、代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。

b、cookie中存放着一个sessionID。请求时会发送这个ID。

c、session因为请求(request对象)而产生。

d、session是一个容器,可以存放会话过程中的任何对象。

e、session的创建和使用总在服务端,而浏览器从来都没得到过session对象。

f、Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。

token

token是用户验证的方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)。

cookie与session区别

a、cookie保存在客户端,session保存在服务器端。

b、cookie 存在安全隐患,且保存数据有限

d、session一定时间内保存在服务器上。当访问增多,占用服务器性能

session id 认证和token认证有啥区别

a、作为身份认证 token比session id 更安全。

b、APP利用token机制进行身份认证。

Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token,如果指的是OAuth Token 或类似的机制的话,提供的是认证和授权,认证是针对用户,授权是针对App 。

c、如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口(比如从微信跳转到京东商城的微官网),用 Token 。

Session只提供一种简单的认证,即有此 SID,即认为有此 User的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方App。如果你允许第三方调用api接口,则用token。


token储存在哪?

数据库:token可以储存在数据库中,但是有可能出现查询数据库中token时间太长,导致数据丢失。

内存:为了查询速度,也可以将token储存在内存,这样查询速度没有问题,而且就是token是一个32位的字符串,千万级的用户量,也占不了多少内存的。


token加密

对称加密中的3DES加密,采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

非对称加密中的RSA,遵循规则:公钥加密和私钥加密,具体可在公众号后台回复【公钥】二字查看。


token的好处

1、避免用户多次输入密码

2、实现自动登陆

3、避免在终端直接存储用户的密码

4、标示客户端的请求是否合法

这就是对token的总结,希望非技术出身的小伙伴能有所收获,以后和开发的沟通效率变得更高。

更多干货可关注微信公众号:chanpinliu880 ,关注后可获得第一手干货。

私人微信号:yw5201a1,有问题也可找我交流。

帮你成长

我之前也创立过产品经理学习交流群,那个时候由于人数少,大家讨论也蛮积极的,但是微信群讨论的一大弊端就是无法将谈论的知识提炼出来,干货内容渐渐被口水话淹没,所以我建立了一个知识星球(原小密圈),在这里我会分享自己的思考感悟,你有问题可以随时像我发起提问,同时别人提的问题你也能看到,更重要的是你不论什么时候看这个回答它都在!

同时大大老师以后所有的live,小密圈的同学都可以免费学习。

为了更好的服务知识星球的小伙伴,大大老师将会在知识星球发表一些干货文章和音频供大家学习,当然这些内容公众号是没有的。

知识星球规则:

1、费用:为了保证社群的质量和活跃度,需要先付款99元,签到后会返还

2、返还费用:连续签到3天返还30元,连续签到5天返还50元,连续签到7天返还70元。

下图是返还凭证:

2、签到形式:可以是你的产品感悟,也可以是你学习中遇到的问题,也可以是你回答别人问题。(把你的感悟记录下来,把你遇到的问题提出来,帮助解决别人遇到的问题,这个过程就是成长,切记不要潜水,好歹你也是付费进来的)。

3、奖励:每周抽取最活跃的用户,(提出的问题+发表的产品感悟+回答别人问题)总数最多,即有可能获得现金红包、PRD文档、面试简历模板、原型文件等不同奖励形式。

奖励凭证:

邀请5个小伙伴加入,则本人加入的费用免除,并同时获赠68元现金奖励,当让为了保证群质量,邀请的小伙伴需要付费加入。

4、广告:社群内禁止发广告,否则即使付费,也要被T出去,如果想发广告,加入上课群,并红包走起,想加入上课群,加微信yw5201a1,拉你入群。

之前付费进入产品经理学习群的小伙伴,可以加微信(yw5201a1),免费拉你入群。

长按下方二维码加入我们吧!

送福利:截至下周一评论区点赞数最多的前5名,可以找我(加微信yw5201a1)领一份私密课干货视频,视频内容任选哦!

往期精彩文章

产品经理面试习题大汇总(二)

产品经理面试一对一咨询指导

4个步骤教你建立后台角色权限系统

老司机教你做产品经理2.0


点击“阅读原文”

即可进行系统的学习 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存