Могу ли я изменить или добавить файлы cookie из JavaScript?

Каковы ограничения для обработки файлов cookie браузера из javascript? Могу ли я проверить, например, включены ли файлы cookie?


person user207414    schedule 10.11.2009    source источник


Ответы (6)


Да! Прочитайте эту замечательную статью об использовании файлов cookie с JavaScript

Вот выдержки из примера кода.

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

А что касается проверки того, включены ли они. Мне нравится ответ jldupont.

person jessegavin    schedule 10.11.2009
comment
Хорошая статья с рабочими скриптами. - person Bratch; 15.10.2010
comment
Спасибо!! Очень хороший пример. - person Sunny Chaudhari; 27.04.2017

Вы пишете файл cookie и пытаетесь прочитать его: таким образом вы узнаете, включены ли файлы cookie.

person jldupont    schedule 10.11.2009

вы можете использовать navigator.cookieEnabled, но я не уверен, что он поддерживается всеми браузерами.

Для получения дополнительной информации о файлах cookie см. это.

person Soufiane Hassou    schedule 10.11.2009

Могу ли я проверить, например, включены ли файлы cookie?

Да, но не так легко, как вы думаете. navigator.cookieEnabled — это очень общий флаг, который точно не указывает, при каких обстоятельствах вы можете установить файл cookie.

Например, сеансовые файлы cookie могут быть разрешены, а постоянные файлы cookie заблокированы. Таким образом, вы на самом деле не узнаете, удастся ли установить cookie-набор, если не попробуете его, установив фиктивное значение document.cookie, а затем прочитав document.cookie, чтобы посмотреть, получилось ли это.

Во многих браузерах постоянный файл cookie будет заменен на файл cookie сеанса, если постоянные файлы cookie отключены. Но не IE, который его просто заблокирует. Вы можете попытаться обнаружить это, установив для постоянных и сеансовых файлов cookie значение document.cookie и проверив, какие из них сохранились.

person bobince    schedule 10.11.2009

На quirksmode есть отличная статья о манипулировании файлами cookie с помощью JavaScript: http://www.quirksmode.org/js/cookies.html

person Mario Fink    schedule 16.01.2013

В коде файлов cookie JavaScript W3Schools есть ошибка. В функции setCookie эта строка:

exdate.setDate(exdate.getDate()+expiredays);

Свойства объекта даты JavaScript:

getDate() - Returns the day of the month (from 1-31)  
...  
getTime() - Returns the number of milliseconds since midnight Jan 1, 1970  
... 

getDate() plus the number of days is not going to work.  I think it should be something like this:  

expire = expiredays * 1000 * 60 * 60 * 24; // convert to milliseconds  
var exdate = new Date( today.getTime() + (expire) );

Библиотеки файлов cookie на TechPatterns.com Сценарий JavaScript Cookie Get Cookie, Set Cookie, Delete Cookie Functions работают лучше (№ 1 в результатах Google не всегда является лучшим).

Я протестировал код с обеих страниц в IE8, и первая из них привела к тому, что срок действия моего файла cookie истекает 01.01.2038, 1:00. Код из второго примера установил дату истечения срока действия моего файла cookie ровно на 1 день с момента, когда я его протестировал, как и ожидалось.

person Bratch    schedule 15.10.2010
comment
Однако у этих библиотек есть еще одна проблема (если файл cookie содержит '='): thinkclay.com/technology/ - person despot; 27.12.2012