00:00
好嘞,然后呢,看看啊呃,首先呢,我们说啊三声共享。就是说如果我们先不考虑这个怎么共享的话,咱们先说这个session。呃,它是我们绘画控制。哎,这个机制里边的一部分啊,咱们先回顾一下我们的绘画控制。哎,这个是我们在扎外边时候学的这部分,那么这个废话控制呢。其实他要解决的是什么问题呢?啊,就是说这个在不考虑分布式的情况下,这个浏览器他访问我们服务器浏览器呢,它会发好多请求。哎。这些请求呢,他们彼此之间呢,就HTTP协议本身来说,他们彼此之间是没有什么关系的。HTTP协议呢,无状态,无类型。就是他在网络上传输的这些数据啊,都是字符串类型。你传12345和传abcde,他认为都是字符串,它不会把12345去识别成这个整数类型,也不会把true false识别为这个布尔类型,呃,HTTP协议它这就不考虑那么细了,它反正传过来都是字符串。
01:14
所以说呢,你看我们。你要是request get。你返回的这个类型呢,就是个字符串,所以说呢,你这个。所以说我们。请求参数呢,其实是一个map键式字符串,值是字符串的数组,嗯,它没有类型,还有它没有状态。他不会去记录你上一个请求。他不会去记录你上一个请求和下一个请求,他们彼此之间有什么关系?啊,他这个属于。呃。吃完了就不认账啊,完了就不认识啊,就好像你去一个你去去你要去去这个你家楼下的一个便利店买东西呢,你跟你天天去是吧,你跟老板就很容易就混熟了,但如果说呢,不是这样一个,就是说你哎随机的去去哪儿去逛街,然后去进去便利店,你跟老板这个。
02:12
萍水相逢是吧,相买完东西以后呢,再相忘于江湖是吧?你们之间就不会有任何的这样的,呃,记忆,你也不会记住他,他也不会记住你啊,哎,呃,所以说这就是他们之间没有状态,没有状态呢,可是我们的从功能上来说又需要它。诶,在你上一次请求完了以后。我下一次呢,我还得知道,还得还是你。你登录了,你在我发这个请求的时候,你已经登录了。然后呢,我现在想说,你在给我发这个请求的时候,你还是我还得能识别到,还是你来了,得是识别到,你是登录的。哎,那这个时候的话怎么做啊,哎,那么这时候呢,浏览器这边呢,靠cookie去存一下。这个相关的信息服务器这边呢,靠session去存一下,然后呢,想办法把cookie和session呢,把它俩能关联起来。
03:06
也就是说呢,其实吧,呃,我们在单一架构的时候要考虑这个事儿,我们在分布式架构的时候呢,其实是在这个基础上又扩展了啊,他需要让他在不同一个模块,不同一个工程的时候,也都能够保持这个状态。啊,所以说这是跟之前的我们的解决方案哈,不是割裂的,它是一脉相承的。哎,那么cookie和session怎么让他们能够互相找到,互相识别到呢?呃,服务器端返回cookie信息呢,给浏览器啊,服务器端返回cookie信息给浏览器,所以说这个cookie最初是从哪来的呢?是服务器端这边来的。服务器端呢,它会创建一个cookie的对象。
04:01
在这儿cookie呢,给他传一个name,给他传一个value啊,所以这cookie呢,其实就是一个也是一个建筑队。就它只是一个,简直对啊,一个名字对应一个纸,都是字符串类型的,这数据也不能存太多啊,因为cookie这个单词的意思就是个小甜饼干啊,这个你你吃奥利奥的时候呢,你回忆一下这个cookie的工作机制啊。哎。就是服务器端的。拿一块旋干给你,你下次呢,你再来的时候,你还拿着这个旋干。哎,然后呢,他根据这个小饼干去确认,去分辨是不是你啊,每一块小饼干上面呢,哎,你在小饼干上面。就是哎,服务器端给你的时候呢,他在旋饼干上面舔一下。然后呢,这里边儿让他舔一下就有你的基因了啊,这个很奇怪啊,就有你的基因了啊,然后下次呢,你再拿着这个小饼干再来是吧,他去看一下啊,是不是你的基因啊。
05:06
呃,服务器端呢,把这cookie呢给扭出来哈,扭出来哈。嗯。这个尿出来以后呢,这边response。这个对象有一个方法叫set cookie。哎,里边把这个cookie给传进来。Cookie传进来,然后呢,把这个响应返回给浏览器,浏览器这边呢,会带一个响应消息头,叫set cookie。哎,这是显消息头,然后这边呢,是这个内等于Y6的形式啊。然后呢,以这种方式,服务器把消息把信息cookie返回给浏览器,他把信息返回给浏览器。返回给浏览器呢。浏览器这边还浏览器这边的话,呃,以后呢,他每次给服务器发请求,他都会把这个cookie给带上。
06:03
每次去他都带上,哎,然后呢,HTTP请求的消息头呢,就是这个cookie。呃。请求消息头哈,这就是cookie啊,这是设置cookie是服务器端返回cookie,这是浏览器带cookie,这边cookie的名字等于cookie的值,哎,所以cookie就是这样一个机制。然后呢,再有cookie这个机制的基础上,然后呢,我们这个session的机制是这样的。哎,我们去把这个session对象呢,从request域里边,就从这个request里边呢给它。呃,是这样的哈,浏览器这边先发一个请求过来啊,发请求给这个服务器端,呃,服务器端呢,如果说你没有调这样的get session这样的方法。那就跟session就没有关系,你就正常去执行别的啊,他就不会去找session,哎,那你如果掉了request get session的话。
07:02
啊,那么那么我就下边要做这样的事了,我检查呢,你的请求里边有没有带一个特殊的cookie,这个cookie的名字叫j session ID。那么下面就两种情况,一个是带了,一个就是没带,嗯,如果要是带了的话,根据这个解3ID在服务器端查找对应的session对象。哎,根据这个解算ID,在服务器端查找对应的session对象。呃,因为解ID呢,服务器端存储session呢,就是以这个解ID啊,作为这个键啊,去对应每一个session,你可以认为呢,在服务器端呢,它有这么一个。Map。哎,你发现很多东西啊,都是以map形形形式来存的,它的只见是一个。这个解session ID的这么个东西值呢,就是那个session。值,那就是那个HTTP。
08:02
那你根据它当然可以去找,它找的话呢,其实又两种情况,一个是能找到,一个是找不到,要能找到呢,就把找到的session对象返回就行了,因为你这调的get session嘛。但是还有一种情况是找不到。这个有一点奇怪,为什么说你明明拿着一个简称ID可能,可是却找不到这个session呢?那是因为呢?你浏览器端这个检测ID这个还在,但是服务器端的这个session吧,可能已经因为超时已经把它给释放了。是吧?树欲静而风不止,子欲养而亲不待啊,有点这个感觉哈。这个检测ID还在,但是session呢,已经永远的离开了我们,他超时了,被释放了。那么这个时候怎么办呢?诶,他不会给你返回一个now啊,它会新建一个session的对象返回。
09:02
这个新的session对象,当然它里边不会有你以前session里边存的那些个数据啊,然后呢,呃,这是一个新的空的一个session对象,然后这个返回的检测ID的这个cookie呢,这当然也是一个新的,然后下次呢,让你带上这个来。哎,所以这是这个新建啊,然后如果说你要是没带解存ID的话,也是新建一个对象返回啊,所以这个时候这两个是操作是一样的。哎,这样的话,这就是我们cookie和session呢,他们工作的一个一个机制啊。嗯。我们后边三人共享啊,也是跟这个当然也是有关系的啊,因为这是一个基础的一个工作的一个机制。
我来说两句