cookie和session

来源:互联网 发布:淘宝闲鱼app下载 编辑:程序博客网 时间:2024/06/07 06:52

我们对cookie的了解往往停留于浏览器的层面,但cookie其实是http协议的一部分,不管服务器端还是浏览器端都需要遵循它。cookie是由服务器第一次应答请求时生成,然后通知浏览器进行缓存,下一次提交时会把当前所有的cookie都提给浏览器,需要注意cookie并不只一个。

在浏览器端以     key=value;key=value的字符串形式存在,分号隔开的两边各位一个cookie。

cookie在浏览器端是以域名+path保存的,同域名里父path的cookie可以给子path共享。例如:

a) A.xxx.com                       cookie: domain=A.xxx.com;path="/"
b) B.xxx.com                       cookie: domain=B.xxx.com;path="/"      
c) A.xxx.com/test/cc           cookie: domain=A.xxx.com;path="/test/cc"
d) A.xxx.com/test/bb          cookie: domain=A.xxx.com;path="/test/bb"
e) A.xxx.com/test
c和d都能共享a的cookie,同样的c和d也能共享e的cookie,c和d以及b和其他cookie之间则无法共享。

cookie共享会导致一个页面存在多个path的情况,这时候浏览器不会做处理,提交到后台时由web服务器的策略做处理,一般而言会默认从最底级的路径往上,取最近的一个。

在tomcat中我们只要在context.xml的<context>标签里加上sessionCookiePath="/"就能做到cookie跨域了。这里所谓的跨域是指a.xxx.com/b和a.xxx.com/c之间cookie共享,这是因为设置这个参数后tomcat是生成cookie时会把cookie的path设成根目录,这样就能全局共享了。

我们知道session是默认会存在cookie里,其实也就是生成一个JESSIONID的cookie由浏览器缓存起来。这时候我们回过头来再想想我们所认知的session会话周期,我们被教导,浏览器页面关闭,这样session会话就丢失了。这到底对不对?

其实这是值得商榷的,如果cookie是会话级的活着禁用的,那么这是成立的。但如果cookie是会被缓存的,那就不能成立,因为下一次再打开时浏览器会检测到缓存的jsessionid cookie,并把它发给服务器,如果这时候这个jsessionid对应的session并没有被invalidate,那就还会被取出来。

所以我们通常的session失效其实是指cookie丢失,cookie丢了,所以jsessionid丢了,导致服务器端只能重新建立session。

我们可以尝试通过缓存把session持久化下来,然后把cookie的失效周期设成永久有效,这样就会看到即使服务器停掉了再开还是会得到相同的session。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 帮人炒股亏了很多钱怎么办 破净买入继续跌怎么办 国画颜色上错了怎么办 宝宝5个月脸一直开裂怎么办 宝宝冻脸怎么办小妙招 3岁小儿长期便秘怎么办 脚裂了怎么办小妙招 宝宝脸风吹裂了怎么办 宝宝脸被风吹裂了怎么办 小宝贝的手有时候抖怎么办 打球把手戳肿了怎么办 阴茎上皮肤皴了怎么办 手皮肤干燥起皮怎么办 一到冬天手脚冰凉怎么办 脸上的皮肤被搓掉了怎么办 皮肤的表皮搓掉了怎么办 固体水彩经常掉出来怎么办 画水彩纸皱了怎么办 画完水彩纸皱了怎么办 旗袍后面隐形拉链气包怎么办 电动缝纫机不往前走怎么办 衬衣领子磨烂了怎么办 白寸衣领变黄怎么办 黑衣领衣服洗发黄怎么办 白毛衣用84变黄怎么办 白色貂毛衣变黄怎么办 蓝色T恤衣领汗積洗不掉怎么办 蓝色t恤衣领汗积洗不掉怎么办 羽绒服在衣柜里放黄了怎么办 白羽绒服放久了泛黄怎么办 白色t恤领子发黄怎么办 身体爱出油衣服领子总爱脏怎么办 白色衣服衣领净洗后变红怎么办 棒球服衣领洗变形怎么办 挂盐水手肿了怎么办 衣服买大了肩宽怎么办 买来的衣服肩宽怎么办 素描揉擦之后的黑点怎么办 扭脖子响了一下怎么办 画的眼线容易掉怎么办 做完眼线后眼睛肿了怎么办