代码之家  ›  专栏  ›  技术社区  ›  GateKiller

是!document.cookie是否可靠?

  •  9
  • GateKiller  · 技术社区  · 14 年前

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

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

    我已经在IE、Firefox和Chrome中测试过了这个功能,当您禁用cookie时,document.cookie对象将变得不可用。有没有人有过使用/不使用这种方法的经验?

    多谢
    史蒂芬

    附加的

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

    5 回复  |  直到 13 年前
        1
  •  6
  •   GmonC    14 年前

    在这种情况下,唯一可靠的方法是(检查cookies是否 残疾人 ,您不介意JavaScript问题,需要一个客户端解决方案)是对测试cookie使用一个set函数,然后使用一个get函数来读取它。如果无法读取测试cookie,则cookie将关闭。

    您可以编写自己的IT实现,阅读 quirksmode 使用A jQuery plugin out-of-box solution .

        2
  •  10
  •   Boldewyn    14 年前

    在XHTML文档中,没有 document.cookie 如果您将文档作为 application/xml )我必须痛苦地学习 document 然而,

    document.cookie = "foo";
    

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

    简而言之:不,你不能确定,没有 文档.cookie 始终与禁用的cookie相同,反之亦然。

        3
  •  1
  •   Marius    14 年前

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

        4
  •  1
  •   Sergiy Belozorov Mohaiminul Islam    14 年前

    Opera7.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版本时,我必须确认脚本的执行。

        5
  •  0
  •   widyakumara    14 年前
    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 :)

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