浅谈cookie、session和token

由于HTTP是无状态的协议,所以服务器想要识别是哪个用户发送的HTTP请求,就需要使用session或是token中的一种。

首先需要理解cookie的概念,cookie只是一串保存在用户本地的字符串,用于记录用户信息,每次发送http请求时,在请求头上都会携带这个cookie,仅此而已。

1、session
显然,如果cookie里存了一些敏感信息,例如用户的用户名和密码,是非常不安全的,所以产生了session。在用户登录后,服务器会给每一位用户生成一个独一无二的session id,一份保存在服务器,一份发送给客户端,至于客户端把session id存在cookie里还是存在storage里都可以,每次请求的时候携带session id给服务器识别用户身份就行了。

2、token
session的缺点显而易见,一是增加了服务器负担,二是如果服务器采用分布式系统,其余服务器没有存放session id则会导致无法识别,所以产生了token。以JWT为例,在用户登录时,服务器会生成一串字符串token,由3部分组成Header、Payload和Signature,以.分隔,类似下面这种:

da2bdsaiu2dbaksbdsj.ndoiwqdwqdniqndiwqondiwqndwqdnsianwoiopzdnw.dsauihdsuaihw

服务器会将token发送给客户端进行保存,而服务器仅需要保存一份密钥用于对Header和Payload进行加密后与Signature进行对比就行了。

token也是可以保存在cookie里或是storage里的:

1)若放在cookie里,每次请求都会自动携带,缺点是不能跨域且容易遭受CSRF攻击
2)若放在storage里,具有更灵活,更大空间,天然免疫 CSRF的特征,缺点是容易受到XSS攻击

通常,我们会放到storage里,每次发起http请求时,放到请求头的Authorization字段中。

参考文章:JWT详解token一般存放在哪里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值