Где ошибка в этом коде очистки куки? - PullRequest
1 голос
/ 05 марта 2012

Скрипка

Cookies.setCookie("x", "42");

var x = Cookies.getCookie("x");
alert("Meaning of life = " + x);

// BUG: This line does not in fact clear the cookie. Why?
Cookies.clearCookie("x");

x = Cookies.getCookie("x");
alert("Life should have no meaning : " + x);

И код печенья:

// This actually appears above, don't worry about undefined Cookies
Cookies = new function() {
    var self = this;

    self.getCookie = function(c_name, opt_domain) {
        var i, name, value, cookies=document.cookie.split(";");
        for (i=0; i < cookies.length; i++) {
            name = cookies[i].substr(0, cookies[i].indexOf("="));
            value = cookies[i].substr(cookies[i].indexOf("=")+1);
            name = name.replace(/^\s+|\s+$/g,"");
            if (name==c_name) {
                if (opt_domain) {
                    if (!(value && value.indexOf(";domain=" + opt_domain) != -1)) {
                        continue;
                    }
                }
                return decodeURIComponent(value);
            }
        }
        return null;
    };

    self.setCookie = function(c_name, value, opt_exdays, opt_domain) {
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + opt_exdays);
        if (!opt_domain) {
            opt_domain = document.domain;
        }
        var c_value = encodeURIComponent(value) + (opt_exdays? "; expires=" + exdate.toUTCString() : "") + ";path=/" + (opt_domain ? ";domain=" + opt_domain : "");
        document.cookie=c_name + "=" + c_value;
    };

    self.clearCookie = function(c_name) {
        // http://blogs.x2line.com/al/articles/316.aspx
        var d = new Date(0).toUTCString();
        document.cookie = c_name + "=deleted;expires=" + d + ";path=/";
    };
};

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Я точно не знаю, в чем проблема с вашим кодом (возможно, это связано с тем, что вы не устанавливаете хотя бы путь), но согласно эта ссылка , более простой способ удалениязначение cookie выглядит следующим образом:

self.clearCookie = function(c_name) {
    self.setCookie(c_name, "", -1);
}
1 голос
/ 05 марта 2012

Это потому, что домен не указан.

Если вы измените clearCookie на:

    self.clearCookie = function(c_name) {
    // http://blogs.x2line.com/al/articles/316.aspx
    var d = new Date(0).toUTCString();
    document.cookie = c_name + "=deleted;expires=" + d + ";path=/;domain=" + document.domain;
};     

Он очищает cookie (используя document.domain).

В качестве альтернативы вы можете просто позвонить:

this.setCookie(c_name, "", -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...