2013-05-05 3 views
0

У меня есть этот код, чтобы установить печенье:Javascript - значение Cookie получает изменилось после хранения

function SetCookie(cookieName, cookieValue, nDays) { 
    var today = new Date(); 
    var expire = new Date(); 
    if (nDays == null || nDays == 0) nDays = 1; 
    expire.setTime(today.getTime() + 3600000 * 24 * nDays); 
    document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=" + expire.toGMTString(), ';path = /'; 
} 

и установить печенье я должен вызвать функцию со всеми аргументами.

SetCookie("number", "1", 10); 

Но значение куки не 1, когда я использую свою функцию ReadCookie значение ПОЛУЧИТЬ которое:

function ReadCookie(cookieName) { 
    var theCookie = "" + document.cookie; 
    var ind = theCookie.indexOf(cookieName + "="); 
    if (ind == -1 || cookieName == "") return ""; 
    var ind1 = theCookie.indexOf(";", ind); 
    if (ind1 == -1) ind1 = theCookie.length; 
    return unescape(theCookie.substring(ind + cookieName.length + 1, ind1)); 
} 

Выход вместо "1":

e85751a63874d221ff23323575137233 
+0

Я пробовал использовать предоставленный код, но это, похоже, работает отлично для меня. Этот вывод, который вы добавили, возвращается для ReadCookie («число»), правильно? –

+0

Да! Он работал нормально, но теперь это отстой. –

+0

Код работает очень хорошо в браузере Chrome –

ответ

0

Ваш код кажется, работает нормально, но я думал, что разместил бы какой-то код, который я написал, чтобы обрабатывать файлы cookie через JavaScript, чтобы дать вам больше идей о том, что вы можете сделать. Я основывал его на примере MDN here, но с функциональностью, которую я хотел (объект-поиск, кеш до изменения). Не стесняйтесь поднять кусочки кода (или использовать его все) для своего проекта.

cookie.setItem('number', 1, 10 * 24 * 60 * 60); // expires is Number => seconds 
cookie.getItem('number'); // "1" 

функцияcookie делает Строка правильно отформатирована для использования с document.cookie, он принимает параметры ключ, Вэл, истекает, путь, домен, безопасный. Параметр истекает может быть Количество (секунд с этого момента или бесконечности), Дата или Строка.

функцияcookie.setItem имеет то же значение, что и cookie, но также применяет его. Если задан только ключ, предполагается, что он полностью отформатирован в файле cookie String.

функцияcookie.getItem только принимает параметр ключ.

функцияcookie.removeItem имеет параметры ключ, путь. Вам нужно всего лишь использовать ключ.

var cookie = (function() { 
    var cookieString = '', 
     items = {}, 
     expireNever = new Date(new Date().valueOf() + 64e10).toGMTString(), // 20 years 
     expireNow = 'Thu, 01 Jan 1970 00:00:00 GMT', 
     cookie, 
     __update, 
     supportsMaxAge = 1; 
    __update = function() { 
     var a, i, j, o = {}; 
     cookieString = document.cookie; 
     a = cookieString.split('; '); 
     i = a.length; 
     while (i--) { 
      j = a[i].indexOf('='); 
      o[decodeURIComponent(a[i].slice(0, j))] 
       = decodeURIComponent(a[i].slice(j + 1)); 
     } 
     items = o; 
    } 
    cookie = function cookie(key, val, expires, path, domain, secure) { 
     var s = encodeURIComponent(''+key) + '=' 
       + encodeURIComponent(''+val); 
     if (!key) return ''; 
     if (expires || expires === 0) { 
      switch (expires.constructor) { 
       case Number: 
        if (expires === Infinity) expires = 'expires=' + expireNever; 
        else { 
         if (supportsMaxAge) expires = 'max-age=' + expires; 
         else expires = 'expires=' + new Date(new Date().valueOf() + expires * 1000).toGMTString(); 
        } 
        break; 
       case Date: 
        expires = 'expires=' + expires.toGMTString(); 
        break; 
       default: 
       case String: 
        expires = 'expires=' + expires; 
        break; 
      } 
      s = s + '; ' + expires; 
     } 
     if (domain) s = s + '; domain=' + domain; 
     if (path) s = s + '; path=' + path; 
     if (secure) s = s + '; secure'; 
     return s; 
    }; 
    cookie.getNames = function() { 
     if (document.cookie !== cookieString) __update(); 
     return Object.keys(items); 
    }; 
    cookie.getItem = function (key) { 
     var s; 
     if (document.cookie !== cookieString) __update(); 
     s = items[key]; 
     if (s || s === '') return s; 
     return null; 
    }; 
    cookie.setItem = function (key, val, expires, path, domain, secure) { 
     var s; 
     if (!key) return null; 
     if (val === void 0) s = key; 
     else s = cookie(key, val, expires, path, domain, secure); 
     document.cookie = s; 
     return s; 
    }; 
    cookie.hasItem = function (key) { 
     if (cookie.getItem(key) === null) return false; 
     return true; 
    }; 
    cookie.removeItem = function (key, path) { 
     if (cookie.setItem(key, '', expireNow, path)) return true; 
     return false; 
    }; 
    // find out if max-age is supported 
    cookie.setItem('test_cookie_max_age', '1', 0); 
    if (cookie.getItem('test_cookie_max_age')) { 
     supportsMaxAge = 0; 
     cookie.removeItem('test_cookie_max_age'); 
    } 
    __update(); 
    return cookie; 
}()); 
Смежные вопросы