cookie,session,localStorage,sessionStorage(1)(一天一个问题11)

tech2022-12-05  104

cookie,localStorage,sessionStorage

比较对象cookielocalStoragesessionStorage数据大小4k左右一般5M或者更大一般5M或者更大数据生命周期可以设置过期时间,不设时间基于当前会话在本地永久性存储数据,除非显式将其删除或清空存储的数据只在会话期间有效,关闭浏览器则自动删除与服务器通信每次http请求都会在http头中携带cookie不参与和服务器通信不参与和服务器通信

cookie跨域共享

客户端二级域名之间跨域共享(damain和path)

www.vinceruan.info----父域名 blog.vinceruan.info-----二级域名 bbs.vinceruan.info------二级域名 我要在这三个域名直接共享cookie如何实现呢? cookie有两个很重要的属性:domain和path domain告诉浏览器当前要添加的cookie的域名归属,如果没有明确指明则默认为当前域名,比如通过访问www.vinceruan.info添加的cookie的域名默认就是www.vinceruan.info,通过访问blog.vinceruan.info所生成的cookie的域名就是blog.vinceruan.info. path告诉浏览器当前要添加的cookie的路径归属,如果没有明确指明则默认为当前路径,比如通过访问www.vinceruan.info/java/hotspot.html添加的cookie的默认路径就是/java/,通过blog.vinceruan.info/java/hotspot.html生成的cookie的路径也是/java/.

在清楚domain和path的生成规则后,我们需要知道浏览器在什么时候提交什么cookie到服务器,即浏览器是通过怎样的规则筛选cookie并提交到服务器的? 浏览器提交的cookie需要满足以下两点: 1.当前域名或者父域名下的cookie 而且 2.当前路径或父路径下的cookie 要满足以上两个条件的cookie才会被提交.举个例子:有4个cookie: cookie1:[name=value, domain=.vinceruan.info path=/] cookie2:[name=value, domain=blog.vinceruan.info path=/java/] cookie3:[name=value, domain=www.vinceruan.info path=/] cookie4:[name=value, domain=blog.vinceruan.info path=/] 当我访问blog.vinceruan.info时, cookie1可以被提交,因为.vinceruan.info是blog.vinceruan.info的父域名. path路径也一致. cookie2不能被提交,因为虽然domain是保持一致的,但是path不一致,当前访问的是/, 但是cookie2的path是/java/ cookie3不能被提交,因为虽然path是一致的,但是www.vinceruan.info不是blog.vinceruan.info的父域名. cookie4可以被提交,因为domain和cookie都严格保持一致.

这里需要注意的是, 在浏览器看来.www.vinceruan.info不是blog.vinceruan.info的父域名,而vinceruan.info才是blog.vinceruan.info的父域名,www.vinceruan.info也算是一个二级域名(这点如果你提交过域名到DNS服务器商的应该会知道,一般我们需要显式提交www.vinceruan.info和vinceruan.info, 否则www.vinceruan.info==vinceruan.info是不成立的)

以登录cookie为例说明 1,共享之间的二级域名必须是解析于同一个顶级域名之下; 2,比如现在有两个二级域名,a.xxx.com(域名A)和b.xxx.com(域名B)。两个都解析于域名xxx.com顶级域名之下。 3,现在域名A的登录cookie域名B下面需要使用。 4,域名A的登录cookie把cookie域设置成xxx.com(注意不要写成www.xxx.com,因为www.xxx.com也属于二级域名,不是顶级域名),path设置成’/’ 5,此时域名B下面可以读取域名A写入的cookie 6,这样就可以实现域名A的cookie被域名B共享 7,如果要实现相互共享,就把两个域名的cookie域都设置成xxx.com.

小结

二级域名a.www.com存cookie想在b.www.com获取,把cookie存在顶级域名www.com下面 path设置成"/"

客户端和服务端跨域共享

客户端设置

axios.defaults.withCredentials = true // 全局设置 axios.post('/kaptcha/getinspectKaptchaImage', { kaptcha: this.verify },{withCredentials:true}) // 局部设置

服务端设置

/*在响应头中设置方法*/ Access-Control-Allow-Credentials: true // 设置响应头 /*koa中设置方法*/ app.use(cors({credentials:true})); // koa2中中间件cors设置

博客地址

最新回复(0)