Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Куки чистяться после закрытия всех окон FF.


Автор: Innuendo 8.4.2006, 21:22
Работа с куками. Есть матрицы- двумерные массивы. Сохранение происходит путём загона матрицы в стринг и стринг в куку. Загрузка это считка стринка с куки, и перегона в массив.
Всё работает идеально. Только вот я щас заметил, что когда все окна FireFox закрываю, то куки потераются, и записи пусты. Как это предотвратить?

Вот пример функция загрузки/сохранения:
Код

/*        ***************** GENERAL FUNCTIONS WITH COOKIES  *********************  */
function setCookie(name, value, expiredays, path, domain, secure) { // установка кука
    var todayDate = new Date();
    todayDate.setDate(todayDate.getDate() + expiredays);
    var cdata = name+"="+escape(value)+
       ((expiredays)? "; expires=" + todayDate.toGMTString() : "")+
       ((path)? "; path=" + path : "")+
       ((domain)? "; domain=" + domain : "")+
       ((secure)? "; secure" : "");
    document.cookie = cdata;
}
function getCookie (name) { //получение кука
    var prefix = name + "=";
    var cookieStartIndex = document.cookie.indexOf(prefix);
    if (cookieStartIndex == -1) return null;
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
    if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
} 
function deleteCookie (name, path, domain) { //удаление кука
    if (getCookie(name)) {
        document.cookie = name + "=" + 
        ((path) ? "; path=" + path : "") + 
        ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-99 00:00:01 GMT" 
    }
}
/*        ***************** END-Main Functions With Cookies-END ********************  */

function myLoad(){
if (getCookie('record'+ChosenRecord)){
var _temp = getCookie('record'+ChosenRecord);
document.getElementById("loadMatrix").value = _temp;
document.getElementById(ChosenRecord).firstChild.style.color="black";
} else {
alert('Запись пуста');
document.location.href=document.location.href;
}
document.getElementById("flashLogo").style.visibility="hidden"
build();
}
function matrixSave(){
var _records =  getCookie('records');
if (!_records)  {
_records=0; setCookie('records','0','+10y');
}
if (_records==10) {
RemAll();
} else {
var beta = Number(_records)+1;
var CookieName = 'record'+beta;
setCookie(CookieName,matrixForSave,'+10y');
setCookie('records',beta,'+10y');
alert('Матрица успешна сохранена');
}
}


Автор: sergejzr 8.4.2006, 21:37
Строчка 6

Код

((expiredays)? "; expires=" + todayDate.toGMTString() : "")+

там надо чтонибудь побольше, чем todayDate поставить.

Автор: Innuendo 8.4.2006, 21:49
а почему оно так?
к примеру я сохранил матрицу, могу её загрузить. Закрываю браузер, открываю опять, и её уже нету smile
Проходят считанные минуту, а он уже чистит при закрытии smile

Автор: sergejzr 8.4.2006, 22:06
Посмотри формат в котором дата в куках должна стоять. expires задаёт время жизни куки. Если он не указан или браузер не может разобрать, что там, то кука действует только на время открытой страницы.

Автор: Innuendo 8.4.2006, 22:18
ага, понял... щас поколдую smile

Автор: Innuendo 8.4.2006, 22:43
ошибку бы вроде нашел.
Код

((expiredays)? "; expires=" + todayDate.toGMTString() : "")+  //6-ая строка.

Если это использовать то надо задавать expire в кол-ве дней:
Код

_records=0; setCookie('records','0','100'); //строка 44

выбрал 100 дней и всё равно.

Вот мой черновик(чисто страница теста этого дела с куками, отдельно от всей программы):
в текстареу заводим что-то: он сохраняет. МОжно загрузить нажав на запись, и потмо лоад, или внизу на одну из пяти кнопок взависимости от номера записи.
http://xthost.info/ggg/cookiestest.html

помогите плз smile мне работу надо сдалть до конца недели с работающей функцией загрузки/сохранения)

Автор: sergejzr 8.4.2006, 23:18
Цитата(Innuendo @ 8.4.2006, 20:43 Найти цитируемый пост)
Если это использовать то надо задавать expire в кол-ве дней:

Это ты где прочитал? smile smile

Вот так должно сработать:
Код

n=10*24*60*60*1000 // 10 дней куки проживут короче

var expiration = new Date(); //берём "сейчас"
expiration.setTime(expiration.getTime() + n); //и прибавляем время, которое куки должны жить


// твой код

// и, наконец:
"; expires=" + expiration.toGMTString();

Автор: Innuendo 8.4.2006, 23:27
Цитата(sergej.z @ 8.4.2006, 23:18 Найти цитируемый пост)
Это ты где прочитал? smile smile

в этом топике:
http://forum.vingrad.ru/index.php?showtopic=23902

Это версия GoodBoy'a, она мне больше всего понравиласьsmile



-------
Блин.. я видно устал, ибо туплю сильно... Код GoodBoy'a то работает.. просто я изменил '+10y' на '100' только в одном месте, а не в 3-ёх.

Изините за беспокойство smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)