2010-07-22 80 views
3

我想用JavaScript测试浏览器是否支持cookies。下面code在Internet Explorer 8和Firefox 3.6,但不与谷歌浏览器5如何测试浏览器是否接受JavaScript的cookies?

function areCookiesEnabled() { 
    document.cookie = "__verify=1"; 
    var supportsCookies = document.cookie.length > 1 && 
         document.cookie.indexOf("__verify=1") > -1; 
    var thePast = new Date(1976, 8, 16); 
    document.cookie = "__verify=1;expires=" + thePast.toUTCString(); 
    return supportsCookies; 
} 

if(!areCookiesEnabled()) 
    document.write("<p>Activate cookies!</p>"); 
else 
    document.write("<p>cookies ok</p>"); 

浏览器就会显示消息“激活饼干!”不管我的cookie设置如何。但是,如果我不接受Cookie,Chrome会告诉我无法设置cookie。

任何想法如何在Chrome中使用JavaScript测试Cookie可用性?

+0

它适用于Chrome 5(在Windows 7上运行)中正常工作。 – James 2010-07-22 15:43:52

+0

我也在Windows 7上运行Chrome 5,但它不起作用! – deamon 2010-07-22 15:48:11

回答

2

告诉cookies是否启用的唯一可靠方法是设置一个,并在下一个请求上检查其是否存在。需要服务器端代码。

+0

我不知道Chrome的脆弱cookie处理,因此在服务器端实施了cookie测试。 – deamon 2010-07-23 10:55:49

2

我不知道为什么代码不能正常工作,但你真的可以简化您的代码,这将有助于牵制的问题:

function areCookiesEnabled() { 
    document.cookie = "__verify=1;expires=" + new Date(1976, 8, 16).toUTCString(); 
    return (document.cookie.length > 1); 
} 

if(!areCookiesEnabled()) 
    document.write("<p>Activate cookies!</p>"); 
else 
    document.write("<p>cookies ok</p>"); 

而且,这里是一个excellent overview of Javascript cookies,它可以帮助你把它钉住。

+0

这是行不通的,因为(至少)Firefox不接受过期的cookies。顺便说一下:为什么'document.cookie.length> 1'而不是'> ='? – deamon 2010-07-22 15:45:17

+0

为什么你将过期日期设置为过去? (最初没有注意到)。指定什么测试长度并不重要,因为您正在测试它是否等于'__verify = 1',这比'1'更多的字符;) – 2010-07-22 15:57:42

+0

我认为'document.cookie.length'是可用cookie的数量。设置为过去是在测试后移除cookie。 – deamon 2010-07-22 16:05:59

相关问题