切换状态Cookie设置成功,但是如果不存在Cookie,该怎么办?

时间:2019-02-03 18:04:16

标签: javascript cookies

我已经成功编码了以下行为:

  • 使用.toggle();隐藏/显示三个divs
  • 当用户使用.toggle();时它还设置了一个记住切换状态的Cookie

这是上面代码的jQuery,可以运行并带有注释:

    <script>
    $(document).ready(function () {

    // If user clicks the toggle it hides/shows the divs

    $(" .togglediv ").click(function () {
        var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
        if (closed)
            $(" .siemaholder, .c_l_off, .c_r_off ").show();
        else
            $(" .siemaholder, .c_l_off, .c_r_off ").hide();

    // If user uses the toggle it sets a cookie to remember the toggle state

        setCookie("open", closed, 365);
    });

    var openToggle = getCookie("open");

    if (openToggle=="true") {        
        $(" .siemaholder, .c_l_off, .c_r_off ").show();
    }
    else {        
        $(" .siemaholder, .c_l_off, .c_r_off ").hide();
    }

});

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}
</script>

我的问题是,当不存在任何cookie时(当用户首次访问该页面并且尚未生成任何cookie时),默认情况下div是 hidden 。我不想要这个-我希望它们默认显示为

我的意图是默认显示它们,直到使用.toggle()设置cookie为止。我之前提到的。这样,当用户首次访问该页面时,就会显示该内容,然后可以由用户手动“隐藏”(从那里记住)。

有人可以帮我吗?

到目前为止,我已经尝试在脚本的开头使用$(" .siemaholder, .c_l_off, .c_r_off ").show();,因此默认情况下将显示div,直到涉及cookie。这没用。

1 个答案:

答案 0 :(得分:0)

1)

有些服务器端Cookie用于授权用户。这些Cookie不应从不设置在客户端脚本中,因为它们会导致 安全性问题(我的原始答案中对此进行了描述)。

2)

客户端cookie可以用于默认用户设置(如您的情况)如果不用于授权用户。

在这种情况下,您应该做的就是让jquery在$(document).ready(中设置如下Cookie:

$(document).ready(function () {
if (!$.cookie('open') || !$.cookie('closed')) {
    $.cookie('open', 1, {expires: 10});
}
$(" .togglediv ").click(function () {
    var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
    if (closed)
        $(" .siemaholder, .c_l_off, .c_r_off ").show();
        $.removeCookie('closed');
        $.cookie('open', 1, {expires: 10});
    else
        $(" .siemaholder, .c_l_off, .c_r_off ").hide();
        $.removeCookie('open');
        $.cookie('closed', 1, {expires: 10});

通过查看server-side vs. client-side cookiesjquery cookies

,您可以找到有关这些主题的更多信息。