Создание файла cookie с использованием PHP, но с трудностями при чтении из JavaScript - PullRequest
2 голосов
/ 03 августа 2010

Я установил свой cookie в PHP, используя следующее:

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true);

Когда я смотрю на куки, хранящиеся в браузере, это выглядит так:

Name:    id
Content: 100
Domain:  .www.mydomain.com
Path:    /AP

Обратите внимание. в домене

Когда я устанавливаю cookie в javascript, я получаю те же результаты, кроме:

Name:    id
Content: 100
Domain:  www.mydomain.com
Path:    /AP

Домен другой. Почему мой PHP-файл cookie ставит «.» перед 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 

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

Ответы [ 4 ]

4 голосов
/ 03 августа 2010

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

Вы устанавливаете cookie на httponly , что означает, что JavaScript не может взаимодействовать с ним. Удалите последний параметр setcookie или установите его на false, и вы сможете получить к нему доступ, используя javascript.

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", false, false);

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

0 голосов
/ 03 августа 2010

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

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

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

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

0 голосов
/ 03 августа 2010

Я собираюсь ответить на этот вопрос только для того, чтобы пометить ответ, однако кредит идет на: munch .Если он поставит ответ на этот вопрос, я удалю его и воспользуюсь его ответом.Пожалуйста, не "голосуйте" за мой ответ.Пожалуйста, проголосуйте за свой комментарий под моим первоначальным вопросом.

Ответ, который munch дал:

@ Джефф V: Вы настраиваете cookie длятолько http, то есть javascript не может взаимодействовать с ним.Удалите последний параметр setcookie или установите его в false, и вы сможете получить к нему доступ, используя javascript.

Я сразу попробовал это и низко, и вот оно сработало!После подопечных я хотел выяснить, о чем они, черт возьми, говорили.Поэтому я пошел: http://php.net/manual/en/function.setcookie.php, чтобы узнать, что это за параметр HTTP.

httponly

Когда значение TRUE, файл cookie будет доступен только через протокол HTTP.Это означает, что cookie не будет доступен для языков сценариев, таких как JavaScript.Этот параметр может эффективно помочь уменьшить кражу личных данных с помощью XSS-атак (хотя он поддерживается не всеми браузерами).Добавлено в PHP 5.2.0.ИСТИНА или ЛОЖЬ

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

0 голосов
/ 03 августа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...