我想知道使用以下Javascript代码是否可靠:
if (!document.cookie) {
alert('Cookies are disabled.');
}
我已经在IE,Firefox和Chrome中对此进行了测试,看来当您禁用Cookie时,document.cookie对象变得不可用。有没有人有这种方法工作/不工作的经验?
非常感谢 斯蒂芬
其他
我很清楚这种方法需要在客户端上启用JavaScript。我也知道其他服务器端/ JavaScript解决方案。请讨论仍然是主题。
答案 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 plugin或out-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已启用。