Javascript 是document.cookie可靠吗?
我想知道使用以下Javascript代码是否可靠:Javascript 是document.cookie可靠吗?,javascript,cookies,Javascript,Cookies,我想知道使用以下Javascript代码是否可靠: if (!document.cookie) { alert('Cookies are disabled.'); } 我在IE、Firefox和Chrome中对此进行了测试,当您禁用cookie时,document.cookie对象似乎变得不可用。有没有人有过这种方法有效/无效的经验 非常感谢 斯蒂芬 附加的 我很清楚,这种方法需要在客户机上启用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>