2010-02-18 67 views
9

我如果使用下面的JavaScript代码疑惑是可靠的:Is!document.cookie可靠吗?

if (!document.cookie) { 
    alert('Cookies are disabled.'); 
} 

我在IE,Firefox和Chrome测试这一点,看来,当你禁用cookie,那么的document.cookie对象变得不可用。有没有人有任何这种方法工作/不工作的经验?

非常感谢
斯蒂芬

附加

我很清楚地知道,这种方法需要JavaScript客户端上启用。我也知道其他服务器端/ JavaScript解决方案。请讨论题目。

+1

它可能是不可靠的 - 但您可以将'document.cookie'测试与'navigator.cookieEnabled'结合使用。 – initall 2010-02-23 14:34:06

+0

我不知道。从措辞上来看,这个问题听起来非常可靠。当您评估document.cookie(或!document.cooke)时,它是否始终返回正确的值?是。 它是Cookie子系统是否完全活动的指示器?不是真的。 – benc 2010-02-27 00:18:19

回答

6

在这种情况下,对我来说唯一可靠的方法就是对测试cookie使用set函数(检查cookie是否为已禁用,您不介意javascript问题,并且需要客户端解决方案) ,然后一个get函数来读回它。如果测试cookie不能被读回,cookies就会关闭。

您可以编写自己的实施方案,从quirksmode读取优质资源,使用jQuery pluginout-of-box solution

1

尝试在服务器上设置一个值,然后在客户端上读取它。如果启用了Cookie,您应该可以读取相同的值。如果不是,他们被禁用。请注意,该网站可能已启用httpOnly。

+0

服务器端检测是最可靠的方式 – Dapeng 2010-03-02 11:19:36

10

在XHTML文档中,根本没有document.cookie(直到Firefox 2,或者如果将文档作为application/xml发送,则永远不会)。我必须学会痛苦,它可以在document但是设置,:

document.cookie = "foo"; 

这是有效的JS和浏览器耸耸肩其肩膀,并设置变量document的财产cookie。但是,在HTTP头中转换它的特殊魔力并没有被调用。

简而言之:不,您无法确定,document.cookie的缺失总是与禁用的Cookie相同,反之亦然。

+0

显然,它也依赖于JavaScript的开启。用户可能已经启用了Cookie,但关闭了JavaScript。 – 2010-02-23 13:18:46

+2

@Paul:这个问题意味着JS开启了,或者不是?否则,如果客户端计算机关闭,代码也不可靠。 – initall 2010-02-23 13:26:50

+0

我没有读到这个问题的含义。它询问是否使用有问题的JavaScript代码是“可靠的”。正在使用JavaScript是次要的问题,但这就是为什么我将这一点作为对我认为是最佳答案的评论的补充,并在开始时加上了“明显”这个词。 (如果客户端计算机已关闭,则无论cookie是否启用都无关紧要,如果JavaScript已关闭,推测它仍然可以) – 2010-02-23 15:30:47

0
var gotCookie = (navigator.cookieEnabled) ? true : false; 

if(typeof navigator.cookieEnabled == 'undefined' && !gotCookie) { 
    document.cookie = 'test'; 
    gotCookie  = (document.cookie.indexOf('test') != -1) ? true : false; 
    } 

如果gotCookie == true,那么你已经gotCookie :)

注: 时,因为没有Cookie设置,document.cookie似乎即使cookie被在浏览器中启用不可用。这就是为什么我们使用document.cookie = 'test'来设置它,然后在下一行检查它。当然,假设js已启用。

1

Opera 7.10不会理解document.cookie,所以它不可靠。 尝试使用这个来代替:

<script type="text/javascript"> 
var cookieEnabled=(navigator.cookieEnabled)? true : false 

//if not IE4+ nor NS6+ 
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
document.cookie="testcookie" 
cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false 
} 

//if (cookieEnabled) //if cookies are enabled on client's browser 
//do whatever 

</script> 

,与大多数浏览器兼容且不会使用它的那些不再使用。我已经在HTML和XHTML中使用Internet Explorer 8.0,Firefox 3.6,Google Chrome 4.0,Opera 10.10进行了测试。在Internet Explorer 8.0中使用HTML版本时,我必须确认脚本的执行情况。