Я задаюсь вопросом, если использование следующего кода JavaScript надежно:
if (!document.cookie) {
alert('Cookies are disabled.');
}
Я протестировал это в IE, Firefox и Chrome, и кажется, что, когда Вы отключили куки, объект document.cookie становится недоступным. У кого-либо есть опыт с этой работой работы/не метода?
Большое спасибо
Stephen
Дополнительный
Я хорошо знаю, что этот метод требует, чтобы JavaScript был включен на клиенте. Я также знаю о других решениях для стороны сервера/JavaScript. Может обсуждение оставаться по теме.
Единственный надежный способ для меня в этом сценарии (проверьте, отключены ли файлы cookie , вы не возражаете против проблем с javascript и вам нужно решение на стороне клиента) - это использовать функцию set для тестовый файл cookie, затем функция get, чтобы прочитать его. Если тестовый файл cookie не может быть прочитан, файлы cookie отключены.
Вы можете написать свою собственную реализацию, прочитав отличный ресурс из quirksmode , используйте плагин jQuery или готовое решение .
В документах XHTML нет document.cookie
вообще (до Firefox 2 или навсегда, если вы отправляете документ как application / xml
). Мне пришлось мучительно усвоить, что его можно установить в документе
, однако:
document.cookie = "foo";
Это действительный JS, и браузер пожимает плечами и устанавливает свойство cookie
переменной документ
. Но специальная магия для преобразования этого в HTTP-заголовок не вызывается.
Короче говоря: нет, вы не можете быть уверены, что отсутствие document.cookie
всегда идентично отключенным файлам cookie, и наоборот.
Попробуйте установить значение на сервере и прочитать его на клиенте. Если файлы cookie включены, вы сможете прочитать то же значение. В противном случае они отключены. Обратите внимание, что на сайте может быть включен httpOnly.
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 мне пришлось подтвердить выполнение скрипта.
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 включен.