session与cookie的真情详解

首先了解,session是服务端的,cookie是客户端的!

session和cookie的联系是保存在cookie的sessionid(就是客户端cookie保存key=>value中value的值),如下图

就像你去洗澡堂洗澡给你的小牌子一样,你只有拿着小牌子才能找到你的柜子放衣服,没有小牌子是找到那个是你的啦!

那这个小牌子是怎么给你找到柜子的呢,那就看小牌子上的号码!通过客户端cookie在请求接口和页面的时候,这个cookie都会被带着到服务端的,

它是放到header中,随时都带着的,服务端所以每次都去header拿这个cookie,看看有没有这个cookie的柜子!

拿着cookie到了服务端,服务端根据这个小牌子去找对应的这个小牌子存储的信息,信息在哪?服务端存储session的信息可以存储到很多地方,这个就要根据我们不同语言的不同设置放到不同的地方!例如php默认配置在file中,linux下默认位置:/var/lib/php/session/下,这个都是可以改了,改写php的配置文件就可以,也可以在程序中设置!

上边的说的存储位置并不是说file文件的多个地方,这个地址多个存储位置是指不同的存储形式,例如session可以存储在file,redis,mc,mysql等等,任何可以存储的地方你认为都可以,同时你也可以自己实现各种存储方式!

通过上边你应该对session和cookie有了一个初步的认识,你认识到cookie和session是怎么联系在一起,session和cookie存储在哪里,怎么存储的!

下边我在详细说下session实现的机制,session就是实现 read write open close destory gc等几个方法,白话就是打开一个容器,向里边放入你的信息(这个信息可以根据一个key找到,你可以想象为map结构),另外客户端请求的时候,发送过来的sessionid,通过sessionid在去容器里根据key拿到刚才放进去的信息。就实现open read和write,另外用完的时候close这个容器,destory这个key。另外防止信息过多,撑爆容器,我们就需要gc一下!所以我们完全可以自己实现这个功能!所以说它可以存储任何存储里边,实现上边的几个方法就行!

cookie中保存在客户端,要注意的是

domain:在那个域名下cookie,只能这个域名下可以看到和子域名看到!

path:保存的路径,一般是 “/”

expries:有效期,cookie能存活的有效期

Http:是否cookie在http下只读!

上边这些都要注意!

另外读学习看浏览器的f12下network,看请求中cookie传递!