aro*_*oth 24 javascript cookies
所以我有一个网站使用cookie记住跨访问的当前布局状态.一切是伟大的工作,直到我加入了Facebook的"喜欢"按钮,其生成允许用户共享一定的UI状态(有点混乱,但没有真正的问题有关)链接的网站.
问题是,当我通过其中一个Facebook链接访问该网站时,我的布局cookie的第二个副本似乎被创建(如同,我看到两个具有相同名称和不同值的cookie).这不会太糟糕,除了重复cookie的值似乎被卡住,再加上当用户返回站点时,浏览器会记住卡住的值而不是最近设置的值(所以它的类型就像有一个"好"的cookie我仍然可以使用,而一个"坏"的我不能,并且浏览器喜欢记住"坏"cookie而不是"好"cookie.这打破了我的布局跟踪/记忆功能.
所以这里有两个问题:
如果我在访问处于卡住状态的页面后使用Chrome的开发者控制台,我可以看到document.cookie(添加了格式以提高可读性):
layoutState=[{'id':6,'x':8,'y':1525,'z':4,'url':'undefined'}, {'id':1,'x':625,'y':709,'z':2,'url':'undefined'}, {'id':2,'x':8,'y':37,'z':3,'url':'undefined'}, {'id':3,'x':625,'y':1179,'z':5,'url':'undefined'}, {'id':4,'x':626,'y':37,'z':1,'url':'undefined'}, {'id':5,'x':626,'y':357,'z':1000000,'url':'http://m.xkcd.com/303/'}];
WibiyaNotification1=1;
WibiyaNotification213286=213286;
WibiyaNotification213289=213289; wibiya756904_unique_user=1;
JSESSIONID=DONTHIJACKMEPLEASE;
WibiyaProfile={"toolbar":{"stat":"Max"},"apps":{"openApps":{}},"connectUserNetworks":[null,null,null,null,null,null]};
WibiyaLoads=59;
layoutState=[{'id':6,'x':8,'y':1525,'z':4,'url':'undefined'}, {'id':1,'x':625,'y':709,'z':2,'url':'undefined'}, {'id':2,'x':8,'y':37,'z':3,'url':'undefined'}, {'id':3,'x':625,'y':1179,'z':5,'url':'undefined'}, {'id':4,'x':626,'y':37,'z':1,'url':'undefined'}, {'id':5,'x':626,'y':357,'z':6,'url':'http://m.xkcd.com/303/'}]"
Run Code Online (Sandbox Code Playgroud)
忽略Wibiya cookie和JSESSIONID.被卡住的Cookie是第一个"layoutState"实例,我仍然可以操纵JavaScript中的一个是第二个"layoutState"实例.如果我改变一些事情,这就是我得到的:
layoutState=[{'id':6,'x':8,'y':1525,'z':4,'url':'undefined'}, {'id':1,'x':625,'y':709,'z':2,'url':'undefined'}, {'id':2,'x':8,'y':37,'z':3,'url':'undefined'}, {'id':3,'x':625,'y':1179,'z':5,'url':'undefined'}, {'id':4,'x':626,'y':37,'z':1,'url':'undefined'}, {'id':5,'x':626,'y':357,'z':1000000,'url':'http://m.xkcd.com/303/'}];
WibiyaNotification1=1;
WibiyaNotification213286=213286;
WibiyaNotification213289=213289;
wibiya756904_unique_user=1;
JSESSIONID=DONTHIJACKMEPLEASE;
WibiyaProfile={"toolbar":{"stat":"Max"},"apps":{"openApps":{}},"connectUserNetworks":[null,null,null,null,null,null]};
WibiyaLoads=59;
layoutState=[{'id':1,'x':8,'y':39,'z':1000000,'url':'undefined'}]
Run Code Online (Sandbox Code Playgroud)
第二个'layoutState'具有我希望浏览器记住的正确信息.然而,浏览器实际记得的是第一个实例的价值.
我试过解封完全饼干,导致二审消失了,但没有我这样做似乎摆脱了一审.我在所有主流浏览器(Chrome,Firefox,IE)中都有相同的行为,这让我怀疑我必须在这里做一些根本错误的事情,但我不确定它是什么.
您可以在此处查看网站本身.或点击此处通过Facebook链接访问它(应生成卡住的cookie).任何帮助深表感谢.
更新:
因此,可靠地重现错误的步骤如下:
我还注意到,通过Facebook风格的URL重新访问该网站可以清除/重置卡住的cookie.所以,它就像浏览器是保持一个独立的cookie为每个URL路径,或什么的,而不是让根页面访问被对方URL路径上设置cookie.我以为我可以通过明确设置path=/cookie 来解决这个问题,但没有骰子.
更新2:
我发现如果我设置cookie的路径和域,我会在所有浏览器中得到不同的行为:
syo*_*kit 26
Dude(tte),你的cookie setter中存在不一致和错误.
清除cookie并设置cookie时,路径和域应该相同.在这里查看您的代码:
document.cookie = c_name + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
Run Code Online (Sandbox Code Playgroud)
并将其与:
var c_value=escape(value) + "; expires=" + exdate.toUTCString(); + "; path=/spring; domain=aroth.no-ip.org";
Run Code Online (Sandbox Code Playgroud)
你会看到setter有两个,但删除器没有.你会带来混乱.
我在上面引用的第二行代码中,在字符串连接表达式的中间引入了分号.之后exdate.toUTCString().杀死它.杀了......现在.
至少在我的谷歌浏览器上,我设法让它正常运行,如果我设置断点json = "[" + json + "]";并setCookie在执行之前进行修改.
P/S:这是一个古怪的调试经验,我设法layoutState通过摆弄路径和域来设置4个cookie.