Каковы ограничения для обработки файлов cookie браузера из javascript? Могу ли я проверить, например, включены ли файлы cookie?
Могу ли я изменить или добавить файлы cookie из JavaScript?
Ответы (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.
Вы пишете файл cookie и пытаетесь прочитать его: таким образом вы узнаете, включены ли файлы cookie.
вы можете использовать navigator.cookieEnabled
, но я не уверен, что он поддерживается всеми браузерами.
Для получения дополнительной информации о файлах cookie см. это.
Могу ли я проверить, например, включены ли файлы cookie?
Да, но не так легко, как вы думаете. navigator.cookieEnabled
— это очень общий флаг, который точно не указывает, при каких обстоятельствах вы можете установить файл cookie.
Например, сеансовые файлы cookie могут быть разрешены, а постоянные файлы cookie заблокированы. Таким образом, вы на самом деле не узнаете, удастся ли установить cookie-набор, если не попробуете его, установив фиктивное значение document.cookie
, а затем прочитав document.cookie
, чтобы посмотреть, получилось ли это.
Во многих браузерах постоянный файл cookie будет заменен на файл cookie сеанса, если постоянные файлы cookie отключены. Но не IE, который его просто заблокирует. Вы можете попытаться обнаружить это, установив для постоянных и сеансовых файлов cookie значение document.cookie
и проверив, какие из них сохранились.
На quirksmode есть отличная статья о манипулировании файлами cookie с помощью JavaScript: http://www.quirksmode.org/js/cookies.html
В коде файлов 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 день с момента, когда я его протестировал, как и ожидалось.