00:00
咱们来看一下屏幕啊,接下来我们来讲一下,就是浏览器和这个服务器的session之间是怎么进行关联的,哎,怎么关联的,这个技术内幕到底是个什么样子,那么说完这个问题以后啊,哎,我们就可以解决一些问题了,什么问题呢?因为大家会问他说老师,你以前说session不是打开浏览器访问服务器,然后先置作在什么时候设置关闭。这个绘画就没了吗?但是通过我们刚刚的学习,我们知道session是有什么是有超时时长的,那如果说在这个给定的超时时长内,我把浏览器关了,诶我再打开再访问。怎么CN就没了呢?CN不是还没超时吗?对吧?哎,面对这一系列的问题,我们来解释一下,大家注意看啊。首先这一边呢,是客户端。
01:02
这边是客户端。也就是浏览器这边啊,浏览器好,那这边是啥呢?这边是服务器啊。OK。我们整体下移一下啊,这边是呃,服务器,我们把这个拿掉。服务器呢,就是咱们的了,好,那么一开始的时候大家请注意看一下哈,我做一些实验,一开始我们把全部的cookie都清掉。现在没有cookie了吧?好,我们先确认一下,现在客户端没有cookie。没有任何的cookie。好,现在呢,这个时候大家注意看,在没有cookie的情况下,我们往服务器发请求。
02:08
啊,发请求。在没有cookie的情况下发请求好,那么服务器调用什么方法呀?大家看一下服务器这样的API是request.get这样一个API。好,别着急,那么这个API第一次访问的时候,他会干嘛,我们说过是不是创建绘画对象啊,没错吧,呃,创建了绘画对象好了,那这个时候。注意哦,你创建这个会话对象它在哪里啊?它在服务器的内存中。呃,这个就是服务器的内存。好服务器的内存中,那么在这个内存当中啊,大家注意看一下,有很多很多个session。
03:09
SESSION2SESSION3等等等等啊,然后最后有一个session n,因为每个客户端都有它自己的session嘛,好那么现在大家注意看啊,看这个图。他这边不是创建了一个绘画吗?然后把这个绘画放到了内存中。没错吧,好,然后注意看。这边就开始返回。诶,返回。OK,返回的时候大家请看一下小的细节啊。现在注意我网络也清了,Cookie也清了,我现在点击这个是不是创建个获取啊,我走。大家看这是一个新的吧,然后看这个网络请求里面,它返回什么东西来响应里面看这个地方。
04:06
他是不是返回一个cookie啊。而且这个cookie它是有特点的,有什么特点。大家看一下cookie的名称叫做GCID。然后cookie的这个值,这个值刚好就是咱们创建的。这个cookie的ID址我复制过来,你对比一下。是不是完全一致对吧,完全一致好,那么。这咱们了解一下哈,那我们说明一下。那么说注意看。服务器每次创建session会话的时候。都会创建一个是吧,什么东西呢?Cookie对象,这个cookie对象的。
05:08
什么呢?T永远是它是固定的啊,叫做什么东西呢?叫GID。看见了吗?因为什么呀,因为它返回的这个数据的值,它就是ID值啊。好,那么。值是什么东西呢?先创建出来的session ID值,这是个非常重要的东西,他怎么把这个信息返回,它通过响应头对吧,大家也看见了,通过响应头把这个信息返回。我复制一下。好。那么通过啊,通过响应把创建出来什么呢?新创建出来的session ID的ID值返回给客户端,就通过这样一个值。
06:12
啊,Set好了,那么这个set返回客户端之后,那想想啊,再想想浏览器解析这个数据以后。浏览器解析收到的数据,哎,就马上创建出一个什么。Cookie呗,创建一个cookie对象,好,那么这个时候我们再来看,这边不是收到了吗?你看这里是不是有这个几session ID了,是不是有这个几线的ID了,好那么大家注意,我们说当客户端有了cookie之后。每次发请求是不是会把这个cookie发送给服务器,好,请看哈,那么后面走。
07:00
走。走。好,大家看一下哈。请求发过去。我们说后面有了cookie之后,每次请求都会把什么呢?Session的ID以cookie的形式发送给服务器。注意他就每次都发送了啊,每次都发送,那么发送了以后大家想想啊,这个时候人家是不是还是调用question.get session这个API,那这个时候大家想想,我们说之后的每次访问是不是都是获取啊,他怎么能够获取到呢?根本的原因就是因为。大家想想,这边已经把这个cookie人家发过来了,那我们说cookie ID是唯一的,你都把这个ID过来了,那我肯定能找到我原来那个session呢。
08:08
能理解吗?它就到这里边来找,到内存中去找每一个session去遍历,看看哪一个的ID值跟我的一样,能理解了吗?诶,好了,咱们说。这个时候,通过cookie中的ID值找到自己之前创建好的session对象并返回。你看都是有说法的哈,都是有说法的好,那这个时候他就可以得到之前创建好的C,你看哈,现在我把这个稍微行了,这个地方有这个session对应的一个cookie,那么我每次发请求我点force吧,我点false,我点false,我点false,大家看每次发请求的时候,这个地方是不是会把。
09:06
Session的那个ID的信息以cookie的形式,它其实它就是cookie嘛,是吧,哎,发送给了服务器,你看每次都有。看见吗?每次都有。看见吧,哎,每次都有。发送给服务器。OK,这个呢,咱们了解一下。咱们了解一下,好发送给服务器之后,它就会得到原来创建好的。那现在知道了吗?服务器是怎么样得到原来创建好的session呢?其实就是根据这样的一个cookie啊,就根据这样一个cookie信息,我把这个也截下来吧。好,就这样一个位置啊。就发送过去了是吧,就发送过去了,好这个呢,就是他如何找到之前创建好的cookie,那现在我们做一个实验。
10:02
我们做一个实验,做什么实验大家注意看,我们知道这个session的超时时间。咱们配置过之后是不是20分钟啊。也就是在20分钟以内,这个session它都会在的,他都会在的,那现在我们要做什么实验,注意看。我们在这个地方。记住了啊,我们在这个地方。走。画一条线。然后这个地方我们干什么事情呢,删除。第的cookie我们把它删了。注意看啊。走。走哎,我就留在一边就行了啊,就从这个地方开始删除啊,我给它删了,删了以后我再画一条线表示删掉了哈,隔开了好,大家想想这个时候是不是又回到了没有。
11:06
Cookie信息的时候。没错吧,那这个时候呢,你请求的时候注意看。他又走上面这种格式。好了,这个时候还是调用谁呀,还是调用了这个。点get session,但现在问题是我们就想了,老师,我现在session还没有超时,你把这个cookie删了,那我是创建一个新的呀。还是给你返回原来创建好那个session,这就是问题了,来我们按照这个实验的说法啊,操作一下看看效果。我现在把这个cookie删掉,删掉之后刷新没有了吗?好,这边没有了,确认了哈,那现在我点击创建和获取,我们来看看他得到的是原来创建好的,还是他会给你创建一个。
12:00
走。大家看见了吗?他给你重新又创建了一个,为啥呀,他不是没有超时吗?确实是,他没有超时,但是由于你这里已经没有cookie了,你在发请求的时候,这里没有携带任何cookie的信息,你在这个地方,Louis,快点get session,请问他还能够。有原来那个ID吗?你连ID都没有了,你怎么找到原来那个session绘画,那必然就找不到了嘛,所以服务器无奈之下怎么办呢?只能再给你创建一个新的。再次创建一个新的session绘画,新的session绘画对象啊,这时候注意一下,他又创建了一个新的,然后。是吧,又到这里面来。能理解了吧,那么他创建了个新的,他还会干啥呀?大家注意下面这个内容,他依然会做什么意思,服务器每次创建一个。
13:08
注意哦,Session绘画对象的时候,他注意看。同样它会创建一个cookie对象,那这个cookie对象的K永远是CID,那么值呢?是新创建出来SID的值,那么好。那我们看一下这个效果到底是不是呢?你看这里面响应这里面,你看这一段是不是又返回一个。GID,那么这个ID值来观察一下到底是不是这个值呢?大家请看是不是完全一样啊,完全符合我们前面说的这个底层的规则是吧,那这个时候呢,你看它又会再次通过响应头。把session ID的值返回给客户端啊,当然这个值我得改改啊,这个值我得改改,人家已经不是那个值了。
14:06
走。OK,那么现在啊,我们把这个放上来。OK,大家看一下这个就是那个新的session ID。哎,就发过来了,那么同样浏览器解析完这个数据之后怎么办?又会创建一个session需要的这个cookie来,我们看这个地方是不是又有了。那又有了以后,你想想你再次发请求怎么办,它又会回到我们前面的这一个状态,这能理解吗?理解了没有,它又出这种情况了,一旦他服务这种情况,当然我把这个ID值换一下哈,把这个ID值换一下,呃,这个ID值现在注意看哈。我把这个网络清了啊,然后大家注意看,我再发请求是不是得到原来老创建的呀,我再点再点再点你看都是吧,然后每次请求的时候,他是不是都把这个CID发过去,看见了吗?都有啊,每个里面都有。
15:12
看见吗?哎,每个里面都有。OK,那每个都有,那不就又完全符合了下面的这种情况了吗?这能理解吧?哎,那这种情况之下会怎么样。啊会怎么样,那他肯定又是得到原来创建好的system这个地方又调用,注意看哈。request.get session,这个时候呢?哎,通过cookie的ID池找到自己之前创建好的session并返回。啊,这时候他就不创建了,因为他能找到了呀,他能找到了呀,在这里面找是吧,找到之后返回,找到之后返回,那这个呢。
16:10
就是什么浏览器和session之间关联的一个技术内幕,它底层的实现季节。好。这个咱们知道一下哈,我们把这个放大一点。大家看浏览器和session啊之间关联的技术内幕啊,通过这个讲解大家看出来没有。啊,看出来没有,那么我们说明一下哈。我们说session技术啊,底层其实是基于。基于什么cookie cookie技术来实现的,这个咱们一定要知道,同时也解决了或者说明了刚刚的一个问题,就是为什么我的这个大家注意哈,为什么。
17:08
我的这个session明明还没有超时,而我关闭了浏览器之后,它就超时了,它就再也找不到了,为什么呀?大家请看他创建了这个cookie。它的一个存活时间是什么?是session,我们说session是什么情况,是浏览器一关这个东西就不在了,你知道吗?那cook浏览器一关cookie就没有了,没有了它就来到了这种什么没有cookie的情况,那你一发进球,它必然就会再创建一个新的,这就是为什么我们说我们打开浏览器访问服务器,Cookie就带了,关闭浏览器session就会话就没有了,是吧?诶没有是因为这个cookie就没有了,大家知道一下哈,好OK,这个是浏览器和session之间关联的一个技术内幕啊。
我来说两句