Создание файла cookie с использованием PHP, но проблемы с чтением из javascript

Я установил свой файл 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 

работает просто отлично.


person webdad3    schedule 03.08.2010    source источник
comment
Название этого вопроса подразумевает, что у вас возникли трудности с чтением файла cookie, но в самом вопросе об этом не упоминается... какова ситуация - у вас действительно возникают трудности с чтением файла cookie?   -  person thomasrutter    schedule 03.08.2010
comment
@thomasrutter - Извините, я совершенно забыл добавить эту часть. С тех пор я обновил вопрос, включив в него функцию ReadCookie и другую связанную информацию.   -  person webdad3    schedule 03.08.2010
comment
Вы настраиваете файл cookie только на http, что означает, что javascript не может с ним взаимодействовать. Удалите последний параметр setcookie или установите для него значение false, и вы сможете получить к нему доступ с помощью javascript.   -  person munch    schedule 03.08.2010
comment
@munch: это был ответ! Спасибо!   -  person webdad3    schedule 03.08.2010


Ответы (4)


Так что кто-то с той же проблемой может легко найти ответ в будущем. Вот мой комментарий в форме ответа:

Вы настраиваете файл 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);

Рад, что смог помочь!

person munch    schedule 03.08.2010

Файл 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
person Artefacto    schedule 03.08.2010

Почему мой файл cookie PHP ставит «.» перед www.mydomain.com и javascript нет.

PHP, вероятно, делает это из соображений совместимости. Это может варьироваться в зависимости от версии PHP.

Точка впереди означает, что файл cookie должен быть назначен не только указанному имени хоста, но и любым поддоменам ниже этого имени хоста.

Таким образом, файл cookie, установленный для .www.example.com, должен работать как на www.example.com, так и на site1.www.example.com.

person thomasrutter    schedule 03.08.2010

Я собираюсь ответить на этот вопрос только для того, чтобы отметить ответ, однако заслуга принадлежит: 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. Правда или ложь

мунк был абсолютно прав. Пожалуйста, напишите его комментарий, когда читаете это.

person webdad3    schedule 03.08.2010