! надежный document.cookie?

Я задаюсь вопросом, если использование следующего кода JavaScript надежно:

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

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

Большое спасибо
Stephen

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

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

9
задан GateKiller 23 February 2010 в 13:54
поделиться

5 ответов

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

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

6
ответ дан 4 December 2019 в 11:41
поделиться

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

document.cookie = "foo";

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

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

10
ответ дан 4 December 2019 в 11:41
поделиться

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

1
ответ дан 4 December 2019 в 11:41
поделиться

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
ответ дан 4 December 2019 в 11:41
поделиться
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 включен.

0
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: