设置jQuery cookie有问题

时间:2015-05-12 08:24:57

标签: javascript jquery cookies

首先,抱歉,我发现有很多关于整个cookie问题的重复,但我必须添加这个,因为我对不同的jQuery cookie插件感到很困惑。

我正在使用此jQuery Cookie Plugin v1.4.1

我在我的一个页面上成功实现了以下代码(不是主页!)

$(document).ready( function() { 
    if ($.cookie('noFadeWorks')) {
        // do something when initial effect on page enter has been already seen
    } else {
        // functions here to do the initial page enter effect
        $.cookie( 'noFadeWorks', true );    
    };
});

现在这基本上适用于一些问题/问题:

  1. 在Safari中按预期工作。当浏览器关闭并重新打开时,所有内容都按照预期和期望从0开始。然而: 谷歌Chrome即使在关闭后重新开放仍然有cookie。我的效果功能不再进入游戏。这里不需要。

  2. 如果从会话的某些方面我可以告诉浏览器忘记cookie并从0开始(在特定页面上有效),那将是非常棒的。 我试过了:$ .removeCookie('noFadeWorks');在我的主页上,但这根本不起作用。

  3. 我自己解释一下吗? 如何正确完成? 我也尝试过期选项但没有成功。

    提前非常感谢!

1 个答案:

答案 0 :(得分:1)

注意:jquery cookie v1.4.1不接受Number作为值:https://github.com/js-cookie/js-cookie/tree/v1.4.1。但那不是问题。

我用jquery v2.1.4和jquery-cookie v1.4.1创建了一个小测试用例(来自上面的链接):

<!DOCTYPE html>
<script src="jquery.js"></script>
<script src="jquery-cookie.js"></script>
<script>
    $(document).ready( function() { 
        if ($.cookie('noFadeWorks')) {
            // do something when initial effect on page enter has been already seen
            alert( "has cookie!" );
        } else {
            // functions here to do the initial page enter effect
            $.cookie( 'noFadeWorks', 'true' );
            alert( "No cookie, creating..." );
        };
    });
</script>

发生以下情况:

  1. 当您第一次进入时,它会创建cookie(“无cookie,创建......”)
  2. 刷新页面时,cookie存在(“有cookie!”)
  3. 如果您再次关闭并打开浏览器,它会显示(“有cookie!”),预期的结果是(“没有cookie,创建...”),因为在v1.4.1中它应该默认创建一个会话cookie我们没有指定path: "/"
  4. 如果我使用ctrl + shift + n以匿名模式启动窗口,则会删除Cookie(Chrome会启动一个新的干净浏览器实例)。

    所以这是我的理论:

    如果您在重新打开Chrome后选择恢复标签,则会再次创建Cookie,因为Chrome正在恢复其窗口会话,包括之前存在的所有Cookie。如果您禁用chrome的“恢复会话”功能,可能会在用户关闭浏览器后删除Cookie,如预期的那样。

    我没有测试过禁用该功能,但直觉上似乎是问题所在。

      

    如果从会话的某些方面我可以告诉浏览器忘记cookie并从0开始(在特定页面上有效),那将是非常棒的。

    您可以指定希望Cookie有效的路径,可以从靠近根的其他路径(例如/)读取的Cookie:

    <!DOCTYPE html>
    <script src="jquery.js"></script>
    <script src="jquery-cookie.js"></script>
    <script>
        $(document).ready( function() {
            if ($.cookie('noFadeWorks')) {
                // do something when initial effect on page enter has been already seen
                alert( "has cookie!" );
            } else {
                // functions here to do the initial page enter effect
                $.cookie( 'noFadeWorks', 'true', {
                    // It will not be visible in the root, only in pages inside the "/dir/" path
                    path: "/dir/"
                });
                alert( "No cookie, creating..." );
            };
        });
    </script>
    

    我建议试用最新版本的jquery-cookie(现在是js-cookie):https://github.com/js-cookie/js-cookie/releases