Javascript 是document.cookie可靠吗?

Javascript 是document.cookie可靠吗?,javascript,cookies,Javascript,Cookies,我想知道使用以下Javascript代码是否可靠: if (!document.cookie) { alert('Cookies are disabled.'); } 我在IE、Firefox和Chrome中对此进行了测试,当您禁用cookie时,document.cookie对象似乎变得不可用。有没有人有过这种方法有效/无效的经验 非常感谢 斯蒂芬 附加的 我很清楚,这种方法需要在客户机上启用JavaScript。我还知道其他服务器端/JavaScript解决方案。请继续讨论主题。尝

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

if (!document.cookie) {
    alert('Cookies are disabled.');
}
我在IE、Firefox和Chrome中对此进行了测试,当您禁用cookie时,document.cookie对象似乎变得不可用。有没有人有过这种方法有效/无效的经验

非常感谢
斯蒂芬

附加的


我很清楚,这种方法需要在客户机上启用JavaScript。我还知道其他服务器端/JavaScript解决方案。请继续讨论主题。

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

在XHTML文档中,根本没有
document.cookie
(在Firefox 2之前,如果您以
应用程序/xml
的形式发送文档,则会一直打开)。我痛苦地了解到,它可以设置在
文档上,但是:

document.cookie = "foo";
这是有效的JS,浏览器耸耸肩并设置变量
文档
的属性
cookie
。但是在HTTP报头中转换这种特性的特殊魔法并没有被调用


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

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

您可以编写自己的it实现,从中读取大量资源,使用或

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

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

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>

var cookieEnabled=(navigator.cookieEnabled)?对:错
//如果不是IE4+或NS6+
if(typeof navigator.cookieEnabled==“undefined”&&!cookieEnabled){
document.cookie=“testcookie”
cookieEnabled=(document.cookie.indexOf(“testcookie”)!=-1)?true:false
}
//if(cookieEnabled)//如果在客户端浏览器上启用了Cookie
//做任何事

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

显然,它还依赖于JavaScript的启用。用户可以打开cookies,但关闭了JavaScript。@Paul:问题是JS是否打开了?否则,如果客户端计算机关闭,代码也不可靠。我没有从问题中读到这一含义。它询问使用所讨论的JavaScript代码是否“可靠”。启用JavaScript是第二个问题,但这就是为什么我添加这一点作为我认为最好的答案的注释,并在开头添加“显然”一词。(如果客户端计算机被关闭,cookie是否被启用并不重要。如果JavaScript被关闭,它可能仍然会被启用。)我在我的XHTML页面上没有看到这种行为。我尝试了| javascript:alert(document.cookie)|和| javascript:alert(document.cookie='foo=bar');|在Firefox3.0及更高版本中。没问题。你能详细说明一下吗?@janmoesen:看来他们已经在XHTML文档上修复了这个问题(以证明我没有幻想:)。它在FF2里。但是,它仍然有效,因为您还可以将文档作为
应用程序/xml
(可能与一些浏览器中的XSLT或其他东西一起使用),然后您又会遇到同样的问题。它可能同样不可靠-但您可以将
document.cookie
测试与
navigator.cookieEnabled
结合使用。我不知道。这个问题的措辞听起来非常可靠。当您计算document.cookie(或!document.cooke)时,它是否始终返回正确的值?对它是否是cookies子系统是否完全激活的指示器?不是这样。服务器端检测是最可靠的方法
<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>