访问⽹址token的格式_⼀⽂彻底搞懂Cookie、Session、
Token到底是什么
欢迎关注⽂章系列 ,关注我
《提升能⼒,涨薪可待》
《⾯试知识,⼯作可待》
《实战演练,拒绝996》
如果此⽂对你有帮助、喜欢的话,那就点个赞呗,点个关注呗!
Cookie
洛:⼤爷,楼上322住的是马冬梅家吧?
⼤爷:马都什么?
夏洛:马冬梅。
6
7⼤爷:什么都没啊?
8
9夏洛:马冬梅啊。
10
11⼤爷:马什么没?
12
13夏洛:⾏,⼤爷你先凉快着吧。
复制代码
⽆状态的Web服务器,什么是⽆状态呢?就像上⾯夏洛特烦恼中经典的⼀幕对话⼀样,⼀次对在了解这三个概念之前我们先要了解HTTP是⽆状态
web后端是指什么话完成后下⼀次对话完全不知道上⼀次对话发⽣了什么。
如果在Web服务器中只是⽤来管理静态⽂件还好说,对⽅是谁并不重要,把⽂件从磁盘中读取出来发出去即可。但是随着⽹络的不断发展,⽐如电商中的购物车只有记住了⽤户的⾝份才能够执⾏接下来的⼀系列动作。所以此时就需要我们⽆状态
⽆状态的服务器记住⼀些事情。
那么Web服务器是如何记住⼀些事情呢?既然Web服务器记不住东西,那么我们就在外部想办法记住,相当于服务器给每个客户端都贴上了⼀个⼩纸条。上⾯记录了服务器给我们返回的⼀些信息。然后服务器看到这张⼩纸条就知道我们是谁了。那么Cookie是谁产⽣的
呢?Cookies是由服务器产⽣的。接下来我们描述⼀下Cookie产⽣的过程
1. 浏览器第⼀次访问服务端时,服务器此时肯定不知道他的⾝份,所以创建⼀个独特的⾝份标识数据,格式为key=value,放⼊到Set-
Cookie字段⾥,随着响应报⽂发给浏览器。
2. 浏览器看到有Set-Cookie字段以后就知道这是服务器给的⾝份标识,于是就保存起来,下次请求时会⾃动将此key=value值放⼊到
Cookie字段中发给服务端。
3. 服务端收到请求报⽂后,发现Cookie字段中有值,就能根据此值识别⽤户的⾝份然后提供个性化的服务。
接下来我们⽤代码演⽰⼀下服务器是如何⽣成,我们⾃⼰搭建⼀个后台服务器,这⾥我⽤的是SpringBoot搭建的,并且写⼊SpringMVC的代码如下。
接下来我们再次刷新这个页⾯可以看到在请求体中已经设置了Cookie字段,并且将我们的值也带过去了。这样服务器就能够根据Cookie中的值记住我们的信息了。
那么浏览器的Cookie是存放在哪呢?如果是使⽤的是Chrome浏览器的话,那么可以按照下⾯步骤。
1. 在计算机打开Chrome
2. 在右上⾓,⼀次点击更多图标->设置
3. 在底部,点击⾼级
4. 在隐私设置和安全性下⽅,点击⽹站设置
5. 依次点击Cookie->查看所有Cookie和⽹站数据
然后可以根据域名进⾏搜索所管理的Cookie数据。所以是浏览器替你管理了Cookie的数据,如果此时你换成了Firefox等其他的浏览器,因为Cookie刚才是存储在Chrome⾥⾯的,所以服务器⼜蒙圈了,不知道你是谁,就会给Firefox再次贴上⼩纸条。
Cookie中的参数设置
说到这⾥,应该知道了Cookie就是服务器委托浏览器存储在客户端⾥的⼀些数据,⽽这些数据通常都会记录⽤户的关键识别信息。所以Cookie需要⽤⼀些其他的⼿段⽤来保护,防⽌外泄或者窃取,这些⼿段就是Cookie的属性。
下⾯我就简单演⽰⼀下这⼏个参数的⽤法及现象。
Path
Domain
接下来的⼏个参数就不⼀⼀演⽰了,相信到这⾥⼤家应该对Cookie有⼀些了解了。
Session
Cookie是存储在客户端⽅,Session是存储在服务端⽅,客户端只存储SessionId
在上⾯我们了解了什么是Cookie,既然浏览器已经通过Cookie实现了有状态这⼀需求,那么为什么⼜来了⼀个Session呢?这⾥我们想象⼀下,如果将账户的⼀些信息都存⼊Cookie中的话,⼀旦信息被拦截,那么我们所有的账户信息都会丢失掉。所以就出现了Session,在⼀次会话中将重要信息保存在Session中,浏览器只记录SessionId⼀个SessionId对应⼀次会话请求。
客户端:和Cookie过期⼀致,如果没设置,默认是关了浏览器就没了,即再打开浏览器的时候初次请求头中是没有SessionId了。
服务端:服务端的过期是真的过期,即服务器端的Session存储的数据结构多久不可⽤了,默认是30分钟。
既然我们知道了Session是在服务端进⾏管理的,那么或许你们看到这有⼏个疑问,Session是在在哪创建的?Session是存储在什么数据结构中?接下来带领⼤家⼀起看⼀下Session是如何被管理的。
Session的管理是在容器中被管理的,什么是容器呢?Tomcat、Jetty等都是容器。接下来我们拿最常⽤的Tomcat为例来看下Tomcat是如何管理Session的。在ManageBase的createSession是⽤来创建Session的。
到此我们明⽩了Session是如何创建出来的,创建出来后Session会被保存到⼀个ConcurrentHashMap中。可以看StandardSession 类。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论