2

我想检查 cookie 是否存在

问题是如果我检查它总是返回 null

if ($.cookie('cookieCreditDash') == null) {

   //CODE ALWAYS ENTER HERE... :(
            alert("no cookie");    
            $.getJSON(url, function(data) {
                saveCreditCookie(data);
            });
} else{
            alert("with cookie");
            var data =  JSON.parse($.cookie("cookieCreditDash"));
}

function saveCreditCookie(jsonData){
    var date = new Date();
    date.setTime(date.getTime() + (30 * 60 * 1000));
    $.cookie("cookieCreditDash", JSON.stringify(jsonData), {expires: date});
 }

为什么>??

顺便说一句,我使用了以下插件:

(function ($, document, undefined) {
        var pluses = /\+/g;
        function raw(s) {
            return s;
        }
        function decoded(s) {
            return decodeURIComponent(s.replace(pluses, ' '));
        }
        var config = $.cookie = function (key, value, options) {
            // write
            if (value !== undefined) {
                options = $.extend({}, config.defaults, options);
                if (value === null) {
                    options.expires = -1;
                }
                if (typeof options.expires === 'number') {
                    var days = options.expires, t = options.expires = new Date();
                    t.setDate(t.getDate() + days);
                }
                value = config.json ? JSON.stringify(value) : String(value);
                return (document.cookie = [
                    encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
                    options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                    options.path    ? '; path=' + options.path : '',
                    options.domain  ? '; domain=' + options.domain : '',
                    options.secure  ? '; secure' : ''
                ].join(''));
            }

            // read
            var decode = config.raw ? raw : decoded;
            var cookies = document.cookie.split('; ');
            for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) {
                if (decode(parts.shift()) === key) {
                    var cookie = decode(parts.join('='));
                    return config.json ? JSON.parse(cookie) : cookie;
                }
            }
            return null;
        };
        config.defaults = {};
        $.removeCookie = function (key, options) {
            if ($.cookie(key) !== null) {
                $.cookie(key, null, options);
                return true;
            }
            return false;
        };
    })(jQuery, document);
4

3 回答 3

1

正如我从文档jquery.cookie.js中看到的那样:expires是天数

if ($.cookie('cookieCreditDash') == null)
{
     $('div').text("no cookie");
     $.cookie("cookieCreditDash", 'test', {expires: 1});
} else{
     var data =  $.cookie("cookieCreditDash");
     $('div').text("with cookie: " + data);        
} 

http://jsfiddle.net/HeGhf/

于 2012-10-06T06:43:01.337 回答
1

是什么$.cookie?一个jQuery插件?

您是否尝试使用document.cookie用于设置 cookie 而不是$.cookie.

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

于 2012-10-06T06:20:14.763 回答
1

看起来您正在使用jQuery cookie 插件

除了 cookie 过期问题,您可能还想检查 cookie 路径,使其可用于您域中的所有路径。您可以通过编写以下代码来做到这一点,

$.cookie("cookieCreditDash", "Value", { path: '/' });

如果没有{path: '/'},cookie 路径将仅限于当前路径级别。

于 2012-10-06T06:55:34.993 回答