cookie、session、token的区别

        很多网站我们登陆过以后会发现,登陆过一次以后,很长一段时间内就不需要登陆了。但是http是无状态的,也就是说这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问。

        如果淘宝不想让已经登陆过的用户再次输入账号密码,就得使用到存储了,这个时候可以选择让浏览器记住账号密码,浏览器得想办法帮我们在每一次请求里加入用户名密码,实现每一次HTTP请求都自动带数据给服务器的技术,这个时候就要用到cookie。

cookie基本流程

                浏览器发起http请求,服务器会进行cookie设置,也就是set-cookie,cookie有名和值两个属性,服务器会把名和值属性里的内容填充完整。cookie发送给浏览器以后,浏览器会保存起来。

这样浏览器以后发送的每一个请求都会自动附上这个cookie,说白了cookie就是保存在浏览器中的数据而已,而且我们每一次打开浏览器,都可以看到保存了哪些cookie,也就是说把用户名和密码放在cookie是很不安全的。只要电脑被黑,在cookie中的重要信息就会被泄露。

 

 

session

        于是后来就有了新的概念,session,也就是会话。既然浏览器和服务器是进行会话的,浏览器访问服务器就是会话的开始。

        比较模糊的是会话结束的时间,因为你关掉网页,也有可能只是按错而已,因此不同的网站对与每个用户的会话都设定了时间以及唯一ID,这里的id就是通常所说的Session ID,这里的时间则是结束会话的时间。

        我们登陆输入用户名密码登录后,服务器确认用户名密码是对的,身份认证成功,然后就会在服务器这边创建一个sessionID和会话结束时间,服务器就需要把SessionID和会话结束时间发送给浏览器,这里使用到cookie的方式发送的,设置cookie,并且把SessionID放到cookie里,再把会话结束时间对应设置为这个cookie的有效期。浏览器拿到cookie后进行保存。

        浏览器这个时候没有保存用户名密码,保存的只是sessionID,只是一个没有规律的字符串。这个cookie也就只有sessionID最重要。

        浏览器保存cookie以后,利用cookie的核心特点,也就是每个请求,都会自动发送cookie到相应服务器,以后浏览器的每一次访问都会发送这个SessionID给服务器。

        直到cookie有效期结束,用户就得重新输入用户名密码了。

session缺点

1.客户端请求依赖服务端,多次请求必须访问同一台服务器。换个服务器就得又登陆一次。

2.session是要占用内存的,如果好几亿用户,会占用大量存储空间。

Token

        这个时候就出现了一个技术叫token,首先用户第一次登陆网页以后,服务器就会生成一个JWT,服务器不需要这个JWT只需要保存这个JWT签名的密文,接着把JWT发给浏览器,让浏览器以Cookie或者Storage的形式存储,这样用户每次发送请求都会把这个JWT给服务器,

 

1.先做一个用户中心,提供一个根据用户名密码查询的接口

2.服务端要再单独搭建一个授权中心

3.就是客户端要去登录,输入账号密码,需要先去服务端的授权中心请求授权

4.然后授权中心授权 去调用户中心的接口,来看一下有没有对应的用户名和密码

5.如果有这个用户,就会颁发一个token给浏览器

6.会去创建一个JWT,通过密钥进行加密

7.将JWT密钥响应给浏览器,

8.浏览器把这个东西保存再cookie中

9.因为每一次访问都会携带cookie,就会自然而然的解析token里面的内容了。

9.也就是之后浏览器访问任何一台微服务就会携带token信息

8.然后再下次访问的时候cookie中就会携带JWT

9.服务器去校验,解析JWT是否合法。不合法就去重新登陆

10.合法的话就到JWT中解析用户信息

总结

这三者其实很简单。session是诞生并且保存再服务器端的,由服务器主导一切。

而cookie则是一种数据载体,把session放入cookie中送到客户端那边,cookie跟随http的每个请求发送出去。

Token是诞生再服务器,但保存再浏览器这边,由客户端主导一切。token可以放在cookie或者Storage里面,持有Token就像持有令牌一样可以允许访问服务器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值