cookie的使用早已不新鲜了,但是最近在做项目时还是被坑了一把。
那么接下来让我们来看一下这个“坑”是个什么情况!
前提:
1.现在有两个页面A.html, B.html,同时,这两个页面中共同嵌入了页面C.html
2.在iframe中使用cookie
3.iframe中的页面并不跨域(即A、B、C为同域)
4.ie8情况下
现象:
当在A中的C页面储存cookie,然后在去B中的C页面读取这个cookie,这时会发现读取不到(偶现,不是必现)。
这里稍微抱怨一下,这种偶现的情况实在坑爹,如果是必现反倒是好查了,这个问题查了我好几个小时,最后只好去C盘下查看存cookie的文件(如果写cookie时没有指定过期时间是不会生成cookie文件的,只会在缓存中,浏览器一关这个cookie就被清除了)。
解决方案:
通过查看cookie文件,我才发现有时候写入的cookie路径是C页面的路径,有时候又是B页面的(应该是iframe嵌套的缘故导致的)。
因为cookie的路径不同,就相当于不同的cookie了,而在读取cookie时往往只能读到当前页面路径下的cookie值,所以在A中的C页面是无法读到B页面中的cookie的。
于是我的解决方案是,在写cookie时主动添加路径,避免C页面写cookie时一会写自己的路径,一会写B页面的路径。
demo如下:
$.cookie('readme', '这里使用了jq的插件', {path : '/sub/C'});