Я установил свой файл cookie в PHP, используя следующее:
setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true);
Когда я смотрю на файлы cookie, хранящиеся в браузере, они выглядят так:
Name: id
Content: 100
Domain: .www.mydomain.com
Path: /AP
Обратите внимание на . в домене
Когда я устанавливаю файл cookie в javascript, я получаю те же результаты, за исключением:
Name: id
Content: 100
Domain: www.mydomain.com
Path: /AP
Домен другой. Почему мой файл cookie PHP ставит "." перед www.mydomain.com и javascript нет.
Ниже приведен код javascript, который я использую для создания файла cookie:
function SetCookie(cookieName,cookieValue,nDays) {
var today = new Date();
var expire = new Date();
if (nDays==null || nDays==0) nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue)
+ ";expires="+expire.toGMTString();
}
Есть идеи?
Обновление:
Когда я пытаюсь прочитать это, используя следующую функцию в javascript:
function ReadCookie(cookieName) {
var theCookie=""+document.cookie;
var ind=theCookie.indexOf(cookieName);
if (ind==-1 || cookieName=="") return "";
var ind1=theCookie.indexOf(';',ind);
if (ind1==-1) ind1=theCookie.length;
return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}
Я не могу получить значение с помощью функции ReadCookie (выше) из файла cookie, который содержит:
Domain: .www.mydomain.com
Однако файл cookie, содержащий:
Domain: www.mydomain.com
работает просто отлично.
Ответ 1 · рейтинг 4 · munch
Так что кто-то с той же проблемой может легко найти ответ в будущем. Вот мой комментарий в форме ответа:
Вы настраиваете файл cookie на http://www.owasp.org/index.php/HttpOnly#What_is_HttpOnly.3F, что означает, что javascript не может взаимодействовать с Это. Удалите последний параметр setcookie или установите для него значение false, и вы сможете получить к нему доступ с помощью javascript.
setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", false, false);
Рад, что смог помочь!
Ответ 2 · Artefacto
Файл cookie с доменом .www.mydomain.com отправляется не только www.mydomain.com, но и subdomain.www.domain.com, sub.subdomain.www.domain.com и так далее.
Однако я не могу воспроизвести упомянутое вами поведение:
a.php
<?php
setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true);
HTTP-запрос:
GET /a HTTP/1.1
Host: localhost:81
HTTP/1.1 200 OK
Date: Tue, 03 Aug 2010 03:49:59 GMT
Server: Apache/2.2.13 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Set-Cookie: id=100; expires=Wed, 04-Aug-2010 07:36:41 GMT; path=/AP; domain=www.mydomain.com; httponly
Content-Length: 0
Content-Type: text/html
Ответ 3 · thomasrutter
Почему мой файл cookie PHP ставит "." перед www.mydomain.com и javascript нет.
PHP, вероятно, делает это из соображений совместимости. Это может варьироваться в зависимости от версии PHP.
Точка впереди означает, что файл cookie должен быть назначен не только указанному имени хоста, но и любым поддоменам ниже этого имени хоста.
Таким образом, файл cookie, установленный для .www.example.com, должен работать как на www.example.com, так и на site1.www.example.com.
Ответ 4 · webdad3
Я собираюсь ответить на этот вопрос только для того, чтобы отметить ответ, однако заслуга принадлежит: munch. Если он даст ответ на этот вопрос, я удалю это и использую его ответ. Пожалуйста, не голосуйте за мой ответ. Пожалуйста, проголосуйте за его комментарий под моим первоначальным вопросом.
Ответ, который дал munch:
@Jeff V: Вы настраиваете файл cookie только на http, что означает, что javascript не может с ним взаимодействовать. Удалите последний параметр setcookie или установите для него значение false, и вы сможете получить к нему доступ с помощью javascript.
Я сразу же попробовал это и низко, и вот, это сработало! После палат я хотел узнать, о чем, черт возьми, он говорит. Поэтому я пошел по адресу: http://php.net/manual/en/function.setcookie.php, чтобы узнать, что означает этот параметр HTTP.
только http
При значении TRUE файл cookie будет доступен только через протокол HTTP. Это означает, что файл cookie не будет доступен для языков сценариев, таких как JavaScript. Этот параметр может эффективно помочь уменьшить кражу личных данных с помощью XSS-атак (хотя он поддерживается не всеми браузерами). Добавлено в PHP 5.2.0. Правда или ложь
мунк был абсолютно прав. Пожалуйста, напишите его комментарий, когда читаете это.