Я пытаюсь установить cookie с javascript и прочитать его на другой странице с php. Я могу написать файл cookie, выполнив
document.cookie = cookieName+"="+cookieValue;
и я частично работаю. – $_COOKIE[cookieName]
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']; ?>
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: ой .. мой .. бог … это была опечатка все время … просто нужно было удалить «путь = / » + » ; дом …« Мне так стыдно за себя прямо сейчас … . Тем временем я также сбросил свои файлы cookie, поэтому теперь Джаред, к сожалению, не могу принять ваше сообщение как anwser … я приносил позор моему имени !!! ….
Читайте о настройке файлов cookie Javascript и, в частности, пути и доступ к домену здесь:
http://www.quirksmode.org/js/cookies.html
Я думаю, что происходит одно из двух:
Таким образом, ваш файл cookie не предоставляет соответствующую информацию браузеру, чтобы он был доступен через субдомены и / или путь к каталогу.
document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'
Обратите внимание: .example.com
– всего лишь примерный домен (вам там нужен ваш), и вам не нужен шаблон, отличный от исходного .
поскольку он проходит через все поддомены. И вам нужно создать expires=
date. Из 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"; }
)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=
bit в функцию 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"; } createCookie('cookieee','stuff','22');
)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 правильно устанавливается в качестве домена.
Доступ к файлам cookie возможен только с помощью кода, который выполняется в том же домене.
Если ваш PHP и .NET-код работает на разных доменах, браузер не будет отправлять файлы cookie для домена A с запросом на домен B (или наоборот) – это принудительное применение политики одинакового происхождения помогает поддерживать работу в Интернете быстро ( поскольку браузер не должен передавать все файлы cookie пользователя для каждого запроса, и сервер не должен разбирать через мегабайты бесполезных данных, чтобы получить интересующие их два поля) и безопасный (поскольку я могу захватить вашу учетную запись если у меня есть cookie от вас с защищенным ключом сеанса.)
@Jared опубликовал хорошую ссылку из QuirksMode, которая дает отличный обзор пути и домена, чтобы у вас был именно тот доступ, который вы хотите получить на своем сайте.
Можете ли вы дать дополнительную информацию? Являются ли они оба в одном домене только разными файлами? Является ли линия
document.cookie = cookieName+"="+cookieValue;
единственная строка, которую вы используете для создания файла cookie?
Если вы хотите расширить домен, доступный для файла cookie, вам необходимо указать его как часть файла cookie:
document.cookie = cookieName + '=' + cookieValue + '; path=/;';