Установите cookie с JS, прочитайте с проблемой PHP - PullRequest
27 голосов
/ 18 февраля 2011

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

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

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

Что на самом деле не совсем полезно. Мне нужно прочитать это на другой странице. Я обычно развиваюсь в asp.net и c #, так что я новичок в 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']; ?>";

и все же я могу читать куки только с той же страницы ..

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

Ответы [ 5 ]

29 голосов
/ 18 февраля 2011

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

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

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

  1. Вы не обращаетесь к куки-файлу из того же домена / субдомена и / или
  2. другая страница не является частью пути, указанного 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 файл .example.com правильно указывается в качестве домена.

5 голосов
/ 18 февраля 2011

К файлам cookie можно получить доступ только по коду, запущенному в том же домене.

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

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

2 голосов
/ 18 февраля 2011

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

document.cookie = cookieName + '=' + cookieValue + '; path=/;';
2 голосов
/ 18 февраля 2011

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

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

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

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

Вам необходимо установить путь для куки.

Например, в javascript, если вы не указываете путь к куки, он задается путем к текущей странице.

В JS:

Для установки cookie:

document.cookie = "key=value; expires=Fri, 03 Aug 2018 12:00:00 UTC; path=/";

В Php:

Для настройки cookie:

setcookie('key', 'value', (time() + (3600*2)), '/');

Для доступа:

if (isset($_COOKIE['key'])) echo $_COOKIE['key'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...