再来也记得我,会话和 Cookie
前面我们学过,HTTP 很健忘,每次请求都把我们当成第一次来的客人。可你一旦登录,就能保持登录好一阵子。一个每次都忘记的服务器,怎么一直认得你呢? 秘密就在一张小小的通行证上。
健忘,所以登录老是掉
前面我们学过,HTTP 很健忘。
一个请求结束,它就把我们忘得干干净净。
所以下次再请求时,
它把我们当成第一次来的客人。
这就冒出一个怪事。
我们只登录了一次,
为什么能保持登录好一阵子?
要是每次都忘,
每次来都该重新登录才对。
按一下访问按钮。健忘的服务器每次都忘,所以每次来访登录都掉,得重新登录。
如你所见,太不方便了。
每次来访都要登录,
很快就累垮了。
可也不能让服务器
把每一个客人都背下来。
世上客人实在太多。
所以用一个聪明的法子。
服务器不去记,
而是塞给客人一张小票。
服务器发一张小通行证
第一次来时,
服务器给客人一张小票。
这张票叫 Cookie。
票上写着一个号码。
就像“你是 7 号客人”。
想想游乐园发的
手环或入场印章就好懂。
服务器只要记住那个号码,
就不用一个个去背众多客人。
现在客人手里
有了一张写着号码的通行证。
服务器把这个号码
和这位客人连起来记下。
要紧的是
通行证由客人随身带着。
不是服务器全背下来,
而是客人保管自己的号码。
那这张通行证
该什么时候再拿出来给看呢?
每次来访都出示通行证
拿到通行证的客人,
就把它揣进口袋。
下次再向服务器请求时,
就连同那张通行证一起出示。
一边说“我是 7 号客人”。
每次来访都一起递出去。
就像在请求的纸角
写上号码再发出去。
所以服务器一看请求,
就立刻知道是谁发的。
按一下访问按钮。客人每次都连同请求一起递出通行证号码。
现在客人每次请求,
都把同一个号码一起发来。
从服务器这边看,
号码每次都到手了。
它健忘记不住客人,
但号码随请求一起来,就没事。
那服务器
看到那个号码会做什么呢?
拿它和自己记下的名单
对一对就行了,对吧?
啊,那个人! 它认出你
通行证号码一到,
服务器就翻开记下的名单。
“7 号是谁来着”地找。
在名单上找到 7 号,
就认出你:“啊,那个人!”
这样把你是同一个客人这条线,
在一次次来访之间接着记下去,
正是会话。
多亏它,登录不掉,
一直接着用。
点一下到达的通行证号码。服务器在名单里找到它,认出“啊,那个人!”,让登录接着用。
本来是健忘的服务器,
现在却能轻松认出我们。
诀窍不是服务器记住了,
而是客人随身带着通行证。
服务器只要号码和名单对上,
再多客人也轻松应付。
不过有一件
要小心的事。
要是号码对了谁都能过,
捡到别人的通行证怎么办?
来理一理
归成一句话,是这样。
HTTP 很健忘,每次都把我们当第一次来的客人。
服务器发一张小通行证(Cookie)。
客人每次来访都出示那张通行证。
服务器看号码就说“啊,那个人!”。
这样接着记住是同一个客人,就是会话。
多亏它,不用每次都重新登录。
记的活儿交给客人的通行证,
服务器只要把号码对上就行。
依次点要点回顾一下。(健忘是问题 → 发通行证(Cookie) → 每次来访都出示 → 啊,那个人!(会话))
现在你知道服务器
怎么再认出我们了。
可只要通行证号码对上,
那是不是真的你,
还没核实过。
拿着号码的人
真的就是那个人吗?
要是被别人截走怎么办?
这个核实是否可信的故事,
下一个领域一起跟着看。