zl程序教程

您现在的位置是:首页 >  后端

当前栏目

cookie和session

Cookie session
2023-09-14 09:04:38 时间
我们对cookie的了解往往停留于浏览器的层面,但cookie其实是http协议的一部分,不管服务器端还是浏览器端都需要遵循它。cookie是由服务器第一次应答请求时生成,然后通知浏览器进行缓存,下一次提交时会把当前所有的cookie都提给浏览器,需要注意cookie并不只一个。 在浏览器端以     key=value;key=value的字符串形式存在,分号隔开的两边各位一个cook

我们对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。




Cookie与Session详解 7、Cookie、Session 7.1、会话 会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话; 你能怎么证明你是西开的学生? 你 西开 发票 西开给你发票
你真的了解 Cookie 和 Session 吗 我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等。但如果再往深入探讨的话,就慢慢有一些朋友不太了解了,谈起原理时就很少有朋友全部回答准确。今天和大家一起深入聊聊有关 Cookie 和 Session 的话题 。