【问题标题】:jquery setting cookie issuejquery设置cookie问题
【发布时间】:2011-11-18 15:47:44
【问题描述】:

我正在我的页面上设置一个 cookie,使用这个插件:https://github.com/carhartl/jquery-cookie

在我的文档准备功能中,我添加了这个:

 $.cookie('checkCook', '2')

在我的文档就绪功能之后,我正在做一些事情并将 cookie 设置为 null,

$(document).ready(function() {

    //setting the cokie

    if($.cookie('checkCook') == '2'){
        alert($.cookie('checkCook'));
         $.cookie('checkCook', null);
    }

})

但直到我在每次刷新浏览器时都收到警报为“2”。这有什么问题吗?

【问题讨论】:

    标签: jquery jquery-plugins cookies


    【解决方案1】:

    如果我理解正确,您的设置如下:

    $(document).ready(function() {
        //setting the cokie
        if($.cookie('checkCook') == '2'){
            alert($.cookie('checkCook'));
            $.cookie('checkCook', null);
        }
    });
    $.cookie('checkCook', '2');
    

    您所期望的是,您对 $.cookie('checkCook', null); 的调用将删除 cookie,但在每次刷新页面时,cookie 会在您调用 $.cookie('checkCook', '2'); 时重置为“2”。

    由于$.cookie('checkCook', '2'); 在你的 doc.ready 函数之外,一旦浏览器点击它就会被调用(记住,页面是自上而下加载的),并且 doc.ready 块被延迟,直到 dom 被加载.这意味着$.cookie('checkCook', '2'); 代码在 doc.ready 块之前执行。这就是为什么您总是收到指出值为“2”的警报。 Cookie 会在每次页面刷新时设置,在您的 alert 被调用之前。

    您可以做的是将 cookie 设置代码包装在一个函数中,然后从 doc.ready 中调用它。这将延迟 cookie 的设置,直到 警报代码执行之后。

    $(document).ready(function() {
        //setting the cokie
        if($.cookie('checkCook') == '2'){
            alert($.cookie('checkCook'));
            $.cookie('checkCook', null);
        }
    
        setCookie();
    });
    
    function setCookie()
    {
        $.cookie('checkCook', '2');
    }
    

    【讨论】:

      【解决方案2】:

      通过将过期时间设置为过去来清除 Cookie。

      $.cookie('checkCook', null, {expires: new Date(1)})
      

      【讨论】:

      • 这不是文档所说的。 $.cookie('checkCook', null) 应该足够了。
      • 是的,如果您将文字 null 作为值,则似乎最新的插件版本会将过期时间隐藏起来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多