Установите 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...
я приносил стыд за мое имя!!!....
Ответы
Ответ 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=/;';