Подтвердить что ты не робот

Установите cookie с JS, прочитайте с проблемой PHP

Я пытаюсь установить cookie с javascript и прочитать его на другой странице с помощью php. Я могу написать файл cookie, выполнив

document.cookie = cookieName+"="+cookieValue;

и я частично работаю. - Файл cookie написан, и я могу прочитать его с помощью $_COOKIE[cookieName], но ТОЛЬКО на той же веб-странице.

Это не очень полезно. Мне нужно прочитать его на другой странице. Я обычно развиваюсь в asp.net и С#, поэтому я готов к новому php. Я что-то делаю неправильно?

Спасибо за ваше время!

EDIT1: обе страницы находятся в одном домене.. например. site.com/index.php → site.com/index2.php

EDIT2: 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();
}

а на другой странице доступ к нему недоступен, но на той же странице он может...

EDIT3: я попытался настроить домен и добавил path=<?php echo $_SERVER['HTTP_HOST']; ?> в код javascript... все равно ничего..

EDIT4: до сих пор у меня есть.

document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_HOST']; ?>";

и все же я могу читать cookie ТОЛЬКО с той же страницы.

EDIT5: ой.. мой.. бог... это была опечатка все время... просто нужно было удалить "путь =/ " + "; дом..." Мне так стыдно за себя прямо сейчас... в то же время я также reset мои файлы cookie, так что теперь Джаред, к сожалению, не могу принять ваше сообщение как anwser... я приносил стыд за мое имя!!!....

4b9b3361

Ответ 1

Прочитайте о настройке файлов cookie Javascript и, в частности, пути доступа к домену и домена:

http://www.quirksmode.org/js/cookies.html

Я думаю, что происходит одна из двух вещей:

  • Вы не получаете доступ к файлу cookie из того же домена/поддомена и/или
  • другая страница не является частью пути, указанным cookie.

Таким образом, ваш файл cookie не предоставляет соответствующей информации браузеру, чтобы он был доступен через субдомены и/или путь к каталогу.

document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'

Примечание. .example.com - это всего лишь пример домена (вам там нужен ваш), и вам не нужен шаблон, отличный от начального ., поскольку он просматривает все поддомены. И вам нужно создать дату expires=. Из QuirksMode:

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+"; path=/; domain=.example.com";
}

Я добавил бит domain= в функцию QuirksMode.

РЕДАКТИРОВАТЬ (пример, приведенный ниже, на страницах моего личного веб-сайта).

Андрей, это отлично работает для меня:

http://example.com/test.php

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+"; path=/; domain=.example.com";
}

createCookie('cookieee','stuff','22');

http://example.com/test/test.php

<pre>
<?php 

print_r($_COOKIE);

?>

И распечатка $_COOKIE покажет файл cookie. Заметьте, что когда я проверяю cookie, файл .example.com правильно настроен как домен.

Ответ 2

Куки файлы могут быть доступны только по коду, который выполняется в том же домене.

Если ваш PHP и .NET-код работает на разных доменах, браузер не отправит файлы cookie для домена A с запросом на домен B (или наоборот) - это принудительное выполнение Политика одинакового происхождения помогает быстро поддерживать сеть (поскольку браузеру не требуется передавать все cookie пользователя для каждого запроса, а сервер не делает не нужно разбирать через мегабайты бесполезных данных, чтобы получить интересующие их два поля) и secure (поскольку я могу захватить вашу учетную запись, если у меня есть cookie от вас с помощью безопасного ключа сеанса.)

@Jared опубликовал хорошую ссылку из QuirksMode, которая дает отличный обзор пути и домена, так что у вас есть именно тот доступ к вам хотите на своем сайте.

Ответ 3

Можете ли вы дать дополнительную информацию? Являются ли они оба в одном домене только разными файлами? Является ли строка

document.cookie = cookieName+"="+cookieValue;

единственная строка, которую вы используете для создания файла cookie?

Ответ 4

Если вы хотите расширить домен, доступный для файла cookie, вам необходимо указать его как часть файла cookie:

document.cookie = cookieName + '=' + cookieValue + '; path=/;';