是!document.cookie可靠吗?

时间:2010-02-18 11:00:55

标签: javascript cookies

我想知道使用以下Javascript代码是否可靠:

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

我已经在IE,Firefox和Chrome中对此进行了测试,看来当您禁用Cookie时,document.cookie对象变得不可用。有没有人有这种方法工作/不工作的经验?

非常感谢 斯蒂芬

其他

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

5 个答案:

答案 0 :(得分:10)

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

document.cookie = "foo";

这是有效的JS,浏览器耸耸肩并设置变量cookie的属性document。但是,在HTTP标头中转换它的特殊魔法不会被调用。

简而言之:不,你不能确定document.cookie的缺席总是与禁用的cookie相同,反之亦然。

答案 1 :(得分:6)

在这种情况下我唯一可靠的方法(检查cookie是禁用,你不介意javascript问题,需要客户端解决方案)是使用set函数对于测试cookie,然后是一个get函数来读回它。如果无法回读测试cookie,则会关闭cookie。

您可以编写自己的实现,从quirksmode阅读优秀资源,使用jQuery pluginout-of-box solution

答案 2 :(得分:1)

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

答案 3 :(得分: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版本时,我必须确认脚本的执行。

答案 4 :(得分: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时,即使在浏览器中启用了cookie,document.cookie似乎也不可用。这就是为什么我们用document.cookie = 'test'设置它,然后在下一行检查它。当然,假设js已启用。