Cookies не работают на разных страницах - PullRequest
12 голосов
/ 11 января 2010

Хорошо, у меня есть набор файлов cookie, и я могу ясно видеть его, если я перехожу к личным данным в Firefox ... хорошо, поэтому, когда я отображаю их на одной странице в определенном каталоге, они работают (www.example.com/ dir), но на странице индекса сайта (www.example.com) он не будет отображаться, он говорит, что cookie не установлен. Да, у меня включены куки, да, я попытался очистить кеш и все такое. Есть идеи? PHP между прочим

Ответы [ 9 ]

22 голосов
/ 11 января 2010

В каком каталоге вы находитесь, когда устанавливается cookie?

Из руководства PHP по setcookie () , выделено мое:

Путь

Путь на сервере, на котором будет доступен файл cookie. Если установлено значение «/», файл cookie будет доступен во всем домене. Если установлено значение «/ foo /», файл cookie будет доступен только в каталоге / foo / и всех его подкаталогах, таких как / foo / bar / домена Значением по умолчанию является текущий каталог, в котором устанавливается cookie.

18 голосов
/ 11 января 2010

Файлы cookie могут быть связаны с конкретным доменом, поддоменом, путем и протоколом (http / https). Вам нужно указать путь при настройке куки в PHP:

setcookie("TestCookie", "Value", time()+3600 , '/' );

Четвертый параметр привязывает его к корню сайта, и он будет доступен в любом подкаталоге основного сайта.

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

setcookie("TestCookie", "Value", time()+3600 , '/', '.example.com' );

Теперь он будет доступен для чтения по адресу:

www.example.com
example.com/newdir
awesome.example.com/newdir

3 голосов
/ 01 октября 2012

Да, попробуйте, я тоже столкнулся с этой проблемой, но решил ее с помощью приведенного ниже кода.

setcookie("TestCookie", "Value", time()+3600 , '/' );
3 голосов
/ 11 января 2010

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

Если это не '/', есть ваш ответ!

1 голос
/ 11 января 2010

Установите свой путь; значением по умолчанию является текущий каталог, в котором устанавливается cookie. Поскольку вы устанавливаете cookie в каталоге / dir, он доступен только в этом каталоге или ниже.

Вы можете обойти это, явно указав путь, т. Е.

setcookie(name,value,expire,path,domain,secure) 

Установить путь к "/".

0 голосов
/ 06 апреля 2018
setcookie("Cookie_name", "Cookie_Value", time()+3600 , '/' );

четвертый параметр ('/') сделает ваши куки доступными для страниц в родительских каталогах.

0 голосов
/ 06 марта 2018
setcookie('cookie_username', $cookie_username, time() + (86400 * 30), "/"); // 86400 = 1 day,  '/' denotes cookie available in entire directory.

и на другой странице:

$username = $_COOKIE['cookie_username'];

также убедитесь, что браузер не блокирует куки.

Если вы хотите использовать куки и в поддомене:

setcookie('cookie_username', $cookie_username, time() + (86400 * 30), "/", ".subdomain.com"); // 86400 = 1 day,  '/' denotes cookie available in entire directory.
0 голосов
/ 12 мая 2013

Cookies должны быть установлены до вывода страницы !!! Поскольку файлы cookie отправляются сценарием в браузер в заголовках HTTP, перед отправкой вашей страницы они должны быть установлены , прежде чем вы даже отправите одну строку HTML или любую другую страницу вывода . В тот момент, когда вы отправляете какой-либо вывод, вы сигнализируете об окончании заголовков HTTP. Когда это происходит, вы больше не можете устанавливать файлы cookie. Если вы попытаетесь, функция setcookie () вернет FALSE, и файл cookie не будет отправлен.

0 голосов
/ 11 января 2010

Вам необходимо установить $ path в / in setcookie(), если вы хотите получить к нему доступ во всех каталогах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...