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

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设置

博客地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值