Cookei、Session以及Token总的来说都是为了实现客户端访问服务器数据而利用的一种手段,可以把服务器数据看成是密码箱,而它们是三种不同的钥匙。
一、定义
1.Cookie
客户端第一次访问服务器时,服务器返回cookie给客户端A,客户端A存储cookie,下次客户端直接带着cookie即可访问服务器数据。
这里你可以把服务器理解为银行,客户端就是银行客户,cookie相当于存折,客户第一次来银行存钱时会给客户发放存折,客户通过存折来银行取钱,也就是取数据
2.Session
这里的session其实就是相当于存放在服务器中的数据。客户端第一次访问服务器时,服务器会给客户端发送一个cookie,cookie中包含着sessionId,当下一次客户端带着cookie来时服务器就会根据cookie中的sessionId来返回sesssion中的数据。
这里的sessionId相当于存折中的账户,session相当于存在银行中的钱
3.Token
在实际的项目中一般会使用多个服务器,如果使用session存储数据就会出现以下两个问题(session共享问题):
- 每台服务器中都有完整的一份session数据,服务器压力过大。
- session拷贝数据时,可能会出现延迟
因此在实际的项目中一般会选择利用redis来替代session来存储数据
由于redis是以键值对的方式存储数据,我们将数据存储在value中,而key是共享的,因此key必须满足唯一性并且方便携带。如果我们将key设置为手机号会将手机号这样的敏感数据放在redis中,会有泄露隐私的风险,因此我们会在后台随机生成一个随机串Token,将它设置为key用来存储数据。
客户端首次访问,服务器给客户端一个token,下次来访问服务器时,客户端带着token即可得到数据。