2010-06-01 79 views
6

这是一个让我循环的东西。我试图设置一个简单的cookie,在IE8上有一个名称:值对。测试FF,它工作正常。 IE8一直阻止它。IE8阻止JavaScript Cookies

我已阅读有关P3P的东西,并创建了一个基本的P3P文档,没有由IBM工具报告的错误,并增加了对所有页面如下:

<meta http-equiv="P3P" CP="CAO DSP COR PSDa CONi TELi OUR STP COM NAV"><link rel="P3Pv1" href="/w3c/p3p.xml"></link> 

的代码,我用它来设置cookie是如下:

function setCompatibilityCookie(c_name, value, expiredays) { 
var exdate = new Date(); 
exdate.setDate(exdate.getDate() + expiredays); 
document.cookie= c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());} 

IE8一直阻止我设置此cookie的任何想法?

谢谢 沙尔克

+1

您是否从“第三方”文档(即在IFRAME中)设置cookie? – 2010-06-01 19:05:56

+0

不,它只是一个HTML页面。实际上,我将代码隔离到一个简单的HTML页面,该页面有两个链接,一个设置cookie,另一个获取cookie值并将其打印到页面。 这在Firefox中完美的工作,但在IE8以及Chrome的cookie从未设置。 – schalkneethling 2010-06-02 11:15:55

+0

现在已经在运行在虚拟机上的IE6上测试过了,它在那里也被阻塞了,所以这是一些奇怪的IE事情。无论如何,你可以看到我在这里使用的最新代码:http://pastebin.com/yB8WSDjW – schalkneethling 2010-06-03 05:46:06

回答

1

一个问题可能是你使用getDate(),返回该月的一天。如果你的expiredays太好了,它应该会推迟到下个月,但是在IE中它可能会在本月停留并立即过期。也许试试这个:

function setCompatibilityCookie(c_name, value, expiredays) { 
var exdate = new Date(); 
exdate.setTime(exdate.getTime() + (expiredays * 86400000)); 
document.cookie= c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());} 
+0

嗨安德烈,感谢您的建议,我都尝试过,但问题仍然存在。请看我对Philippe上面问题的评论。 – schalkneethling 2010-06-02 11:16:53

+0

好吧,铬是'阻塞'我的cookie的原因是因为这个问题http://code.google.com/p/chromium/issues/detail?id=535,你可以阅读更多关于如何解决这个问题在这里:http://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies:现在它只是IE8,一个惊喜;) – schalkneethling 2010-06-02 11:23:03

+0

所以你的网页被加载关闭本地文件系统,而不是关闭远程服务器?我认为这也是你的IE问题。我知道我在几年前和之前遇到过这个问题。基本上,无论何时从本地资源(硬盘驱动器或本地共享)加载文件,浏览器的行为都完全不同。在IE中,你以前几乎可以做任何你想要的本地东西(HTA很棒)。然后安全模型改变了,派对结束了。您是在开发一款应用程序,是为了在本地运行,还是仅仅使用本地驱动器进行开发和测试? – Andrew 2010-06-02 16:06:10

1

我一直在使用相同的代码的年龄与没有任何问题,在客户端设置Cookie。我肯定会调查IE设置而不是代码本身。在IE浏览器中,如果您接受cookie,您有很多可能性来说明取决于源代码(如您发现的那样)。我一定会从这里开始!祝你好运

2

我有同样的问题,并花了很多时间挖掘为什么IE不会保存我的JS cookie。我的P3P的东西是好的,IE浏览器保存响应饼干,但不是JS。

突然和最令人惊讶的我通过从HTML除去下面的行中发现的溶液:

< META HTTP-当量= “内容类型” CONTENT = “text/html的;字符集= UTF-8”/>

我不知道为什么发生这种情况,但解决了我所有的问题。希望这可以帮助某人。

+0

虽然现在我认为这个问题是由于“charset = utf-8”部分造成的。 – EvilDuck 2011-01-01 08:05:48

0

我经历了这个,并尝试了一些在这里的回应,我的发行竟然是到期。我将它设置为99999999999,但是当我将其降低到9999999时,它工作。看来IE8在使用期限上有限制(天才微软,纯天才:s)

0

我面临同样的情况,问题在于...... expiredays就是这样一个关键字,只适用于IE。如果您在whateveryouwant中更改expiredays变量的名称,它在所有浏览器上都能正常工作。

0

我也遇到了这个问题,事实证明它必须处理cookie名称的长度。在这种情况下,我有一个26个字符的cookie名称,除了IE 8和以下的版本,这个名字可以正常工作。我缩短了名称只有10个字符,突然之间IE 8正在读取/写入cookie。我假设这里的任意限制是IE 8 cookie名称的16个字符。