Является ли! Document.cookie надежным? - PullRequest
9 голосов
/ 18 февраля 2010

Интересно, надежно ли использовать следующий код Javascript:

if (!document.cookie) {
    alert('Cookies are disabled.');
}

Я проверял это в IE, Firefox и Chrome, и кажется, что когда вы отключаете куки, объект document.cookie становится недоступным. У кого-нибудь есть опыт работы с этим методом / не работает?

Большое спасибо
Стивен

Дополнительный

Мне хорошо известно, что этот метод требует, чтобы JavaScript был включен на клиенте. Я также знаю о других серверных / JavaScript решениях. Пожалуйста, продолжайте обсуждение по теме.

Ответы [ 5 ]

10 голосов
/ 18 февраля 2010

В документах XHTML вообще нет document.cookie (вплоть до Firefox 2 или всегда, если вы отправляете документ как application/xml). Мне пришлось мучительно узнать, что его можно установить на document, однако:

document.cookie = "foo";

Это действительный JS, и браузер пожимает плечами и устанавливает свойство cookie переменной document. Но специальная магия для преобразования этого в заголовок HTTP не вызывается.

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

6 голосов
/ 28 февраля 2010

Единственный надежный способ для меня в этом сценарии (проверьте, если куки отключены , вы не беспокоитесь о проблемах javascript и нуждаетесь в решении на стороне клиента) - это использовать функцию set для тестовый файл cookie, затем функция get, чтобы прочитать его обратно. Если тестовый файл cookie не может быть считан обратно, файлы cookie отключены.

Вы можете написать свою собственную реализацию, читая отличный ресурс из quirksmode , использовать плагин jQuery или готовое решение .

1 голос
/ 01 марта 2010

Opera 7.10 не поймет document.cookie, поэтому она не надежна. Попробуйте использовать это вместо:

<script type="text/javascript">
var cookieEnabled=(navigator.cookieEnabled)? true : false

//if not IE4+ nor NS6+
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
document.cookie="testcookie"
cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false
}

//if (cookieEnabled) //if cookies are enabled on client's browser
//do whatever

</script>

Он совместим с большинством браузеров, и те, которые не будут работать с ним, больше не используются. Я протестировал его с Internet Explorer 8.0, Firefox 3.6, Google Chrome 4.0, Opera 10.10 в HTML и XHTML. При использовании HTML-версии с Internet Explorer 8.0 мне пришлось подтвердить выполнение скрипта.

1 голос
/ 18 февраля 2010

Попробуйте установить значение на сервере и прочитать его на клиенте. Если куки включены, вы должны иметь возможность прочитать то же значение. Если нет, они отключены. Обратите внимание, что на сайте может быть включен httpOnly.

0 голосов
/ 01 марта 2010
var gotCookie = (navigator.cookieEnabled) ? true : false;

if(typeof navigator.cookieEnabled == 'undefined' && !gotCookie) {
    document.cookie = 'test';
    gotCookie       = (document.cookie.indexOf('test') != -1) ? true : false;
    }

, если gotCookie == true, то у вас gotCookie:)

примечание: при отсутствии набора файлов cookie document.cookie кажется недоступным, даже если файл cookie включен в браузеревот почему мы установили его с document.cookie = 'test', а затем проверим его на следующей строке.конечно, предполагая, что js включен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...