Невозможно установить файлы cookie в Javascript
У меня очень простая строка кода, которая устанавливает и читает файл cookie. Я продолжал получать пустое значение для своего файла cookie и не понимаю, почему. У меня включен cookie и знаю, что файлы cookie работают в браузере.
<HTML>
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
document.cookie = "ding=dong";
</SCRIPT>
<script type="text/javascript">
alert(document.cookie);
</script>
</BODY>
</HTML>
Ответы
Ответ 1
Недавно я наткнулся на подобную проблему. Мой script не смог сохранить файл cookie в Chromium, хотя он хорошо работал на всех других основных браузерах. После некоторых поисковых запросов оказалось, что Chrome игнорирует файлы cookie с локальных страниц. После того, как я загрузил страницу на удаленный серверный код, магически начал работать.
Ответ 2
Chrome запрещает файлы cookie. Чтобы ваша программа работала, вам придется попробовать ее в другом браузере или загрузить на удаленный сервер. Кроме того, код для вашего setcookie и getcookie по сути является неправильным. Попробуйте использовать это, чтобы настроить файл cookie:
function setCookie(name,value,expires){
document.cookie = name + "=" + value + ((expires==null) ? "" : ";expires=" + expires.toGMTString())
}
пример использования:
var expirydate=new Date();
expirydate.setTime( expirydate.getTime()+(100*60*60*24*100) )
setCookie('cookiename','cookiedata',expirydate)
// expirydate being a variable with the expiry date in it
// the one i have set for your convenience expires in 10 days
и чтобы получить ваш файл cookie:
function getCookie(name) {
var cookieName = name + "="
var docCookie = document.cookie
var cookieStart
var end
if (docCookie.length>0) {
cookieStart = docCookie.indexOf(cookieName)
if (cookieStart != -1) {
cookieStart = cookieStart + cookieName.length
end = docCookie.indexOf(";",cookieStart)
if (end == -1) {
end = docCookie.length
}
return unescape(docCookie.substring(cookieStart,end))
}
}
return false
}
пример использования:
getCookie('cookiename');
Надеюсь, что это поможет.
Cheers,
CoolSmoothie
Ответ 3
Я попытался сохранить файл cookie в Chrome и имел ту же ошибку, что и он.
Хотя он работал в Firefox, поэтому я попросил коллега, и он предложил мне убрать путь и домен (у меня было имя файла cookie, значение, expire, path amd domain), и все это сработало.
Так что просто чтобы куки файлы действительно сохранялись в Chrome, вам просто нужно имя, значение и срок действия.
Надеюсь, что это поможет.
Пример:
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+";";
}
Ответ 4
С помощью chrome вы не можете создавать файлы cookie на локальном веб-сайте, поэтому вам нужно обмануть свой браузер, считая, что этот сайт не является локальным, выполнив следующие действия:
1) Поместите корневую директорию веб-сайта в C:\inetpub\wwwroot
(так что это выглядит как C:\inetpub\wwwroot\yourProjectFolder
)
2) Получите computer name
, щелкнув правой кнопкой мыши Computer
, щелкнув свойства и выбрав computer name
3) Зайдите на сайт в браузере, посетив http://my-computer-name/yourProjectFolder/index.html
, после чего создайте файлы cookie.
(заметить, что я использую тире в имени компьютера, НЕ подчеркивает)
Ответ 5
Он отлично работает для меня, но еще раз Убедитесь, что ваши JS
и Cookies
включены в браузере. Вы должны проверить, правильно ли вы используете cookie или не используете if(document.cookie)
, тогда вам будет легче отладить, где проблема. Возможно, вы куки файлы написаны неправильно. Пожалуйста, рассмотрите следующий код.
Пишите cookie
Используйте следующий код для написания файла cookie:
<script language="JavaScript">
cookie_name = "Basic_Cookie";
function write_cookie() {
if(document.cookie) {
index = document.cookie.indexOf(cookie_name);
} else {
index = -1;
}
if (index == -1) {
document.cookie=cookie_name+"=1; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
} else {
countbegin = (document.cookie.indexOf("=", index) + 1);
countend = document.cookie.indexOf(";", index);
if (countend == -1) {
countend = document.cookie.length;
}
count = eval(document.cookie.substring(countbegin, countend)) + 1;
document.cookie=cookie_name+"="+count+"; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
}
}
</script>
Прочитайте ваше Cookie
Как только вы написали файл cookie, вам нужно его прочитать, чтобы использовать его. Используйте этот script для чтения вашего файла cookie:
<script language="JavaScript">
function gettimes() {
if(document.cookie) {
index = document.cookie.indexOf(cookie_name);
if (index != -1) {
countbegin = (document.cookie.indexOf("=", index) + 1);
countend = document.cookie.indexOf(";", index);
if (countend == -1) {
countend = document.cookie.length;
}
count = document.cookie.substring(countbegin, countend);
if (count == 1) {
return (count+" time");
} else {
return (count+" times");
}
}
}
return ("0 times");
}
</script>
Вызов вашего файла cookie в ссылке
Установите свой файл cookie, когда кто-то нажимает ссылку на этот код в вашем теле HTML:
<script language="javascript">document.write(gettimes());</script>
Ссылка: Простые чтения и записи файлов cookie
Надеюсь, что это поможет.
Ответ 6
Я получаю такое же странное поведение при открытии страницы в Chrome от localhost
Когда я сопоставляю одну и ту же страницу в файле моих хостов и открываю одну и ту же страницу с помощью отображаемого имени, нормальная функция cookie возобновляется.
- Откройте файл hosts как admin. (обычно
c:\windows\system32\drivers\etc\hosts
)
- Добавить
127.0.0.1 localhostdevelopment.com
или похож на конец вашего файла hosts
- Сохраните файл hosts (будет отклонен, если вы не открыли файл как admin)
- Перейдите в http://localhostdevelopment.com/ (или как вы его назвали) в Chrome.
- Пожалуйста, наслаждайтесь тем, что ваши файлы cookie ведут себя нормально.
Ответ 7
Chrome не хранит файлы cookie со страниц, загружаемых из локальной файловой системы. ex: file:///C:/User
Ответ 8
Просто измените URL-адрес из сетевого интерфейса loopback на адрес сетевого адаптера вашей локальной сети, выполнив эту работу, например.
http://localhost:8080 -> http://192.168.1.15:8080