19:54

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
[ok]

cookie и php
Здравствуйте.
Подскажите пожалуйста, почему могут не отображаться куки?

Устанавливаю через setcookie('name', 'user').
Проверяю в браузере - куки появились.
Пытаюсь вывести echo $_COOKIE['name'];
Ничего не выводит. пробовал разные комбинации с разными кавычками - не хочет выводить. И в условиях тоже не получается проверить значение куки. В чём может быть проблема?

upd: Обнаружил 2 странности:
1) на всех других сайтах имя куки отображается как "namecookie", те которые я записал - "s namekookie".
2) if (isset($_COOKIE['name'])) echo "ukhj"; ничего не выводит, как будто куки и не записаны, в то время как опера в списке кукисов их показывает вместе со значениями.

upd2: Куки видны только в пределах того каталога, в котором находится скрипт их установивший. Чтобы куки были видны в пределах всего сайта, необходимо указывать зону действия:
setcookie('name', 'user') - неверно, будут видны только в пределах каталога со скриптом.
setcookie('name', 'user', null, "/") - верно, будет видно в пределах всего сайта.
setcookie('name', 'user', time()+3600, "/") - верно, будет видно в пределах всего сайта, через час станет недействительной.

Комментарии
06.04.2012 в 20:35

Sanctus Satanas
Не видя кода тут сложно что-то сказать.

Куки хранятся в браузере.
Сервер может послать куки браузеру путём отсылки HTTP-заголовка Set-Cookie.
Браузер всегда (если в нём не отключено в настройках) посылает установленные для данного домена (включая всякие www и т.п.) куки при любом запросе на сервер (даже если, например, картинки запрашиваются).
Браузер это делает посылая HTTP-заголовок Cookie.

PHP разбирает посланные браузером заголовки и, среди прочего, записывает куки в суперглобальный массив $_COOKIE. Единственное, что может повлиять на этот процесс — директива variables_order в конфиге php.

В Опере можно посмотреть, какие заголовки приходят с сервера и какие уходят на сервер (вкладка Сеть в Dragonfly).
06.04.2012 в 20:51

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
--==SS==--, Да вроде как чуть прояснилось. Попробовал вывод куки на той же странице, где их установил - выводит.

Отсюда вопрос, как мне установить куки, чтобы они виделись в пределах всего сайта?

То есть. У меня структура примерно такая:
1) есть основной каталог, в котором лежит index.php. Собсно в htdocs он у меня и лежит, но не факт, что на хостинге будет также.
2) внутри основного каталога находятся дочерние, в которых скрипты.
3) Куки устанавливается одним из скриптов, в дочернем каталоге.
4) Надо сделать, чтобы они были видны в любой страничке сайта.

В общем. наглядно это будет вроде как-то так:


maindir
|
------ index.php
|
----- s
| |
| +--- script1.php
| |
| +--- script2.php (устанавливает куки и видит их)
| |
| +--- scriptN.php
|
----- i
|
+--- script1.php
|
+--- script2.php
|
+--- scriptN.php


Нужно, чтобы куки виделись в любом скрипте, которых находится в основном каталоге (maindir) или в дочерних каталогах (s, i, ...).
06.04.2012 в 21:06

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
Решил! Отписался в upd2.
06.04.2012 в 21:08

The day that you stop running is the day that you arrive.
Мануал ru2.php.net/setcookie
нам подсказывает:
path

The path on the server in which the cookie will be available on. If set to '/', the cookie will be available within the entire domain. If set to '/foo/', the cookie will only be available within the /foo/ directory and all sub-directories such as /foo/bar/ of domain. The default value is the current directory that the cookie is being set in.


т.е.
setcookie('name','user',0,'/');

Вы действительно мануалы не читаете, что ли?
Возьмите в привычку сначала читать мануал по неработающей команде, а потом спрашивать :)
06.04.2012 в 21:13

Крайне злопамятное хамло ;)
А еще не стесняйтесь выводить содержимое глобальных массивов)
var_dump($_SESSION);
var_dump($_COOKIE);
Это позволит избежать проблем из-за опечаток)
Вначале каждого скрипта есть начало сессии?)
session_start();
06.04.2012 в 21:14

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
neo_rage, Моя читай, просто моя с инглишем не дружит особо Т_Т На чём всё время и спотыкаюсь. + В примерах фиг кто про path напишет, все предлагают вариант на 2-3 аргумента и всё.
06.04.2012 в 21:21

The day that you stop running is the day that you arrive.
Без английского тяжело. Но решили сами, это хорошо. Не потому, что мы такие ленивые, а потому, что это полезно для понимания.
06.04.2012 в 21:26

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
neo_rage, Не потому, что мы такие ленивые, а потому, что это полезно для понимания.

Это да. Но всё же, интересно, вот те люди, которые написали десятки примеров по setcookie, у них всё в одном каталоге что ли? Ни в одном примере не увидел использование 4-го аргумента.


Co0L, var_dump($_COOKIE);

Оно что ли покажет мне куку из каталога, если вызываю из родительского?


Вначале каждого скрипта есть начало сессии?)
session_start();


Честно - нет.
06.04.2012 в 21:29

Крайне злопамятное хамло ;)
Ryuzaki_rnd,
Оно что ли покажет мне куку из каталога, если вызываю из родительского?
Нет, просто оно покажет все куки для этой страницы) Чтобы не обращаться к куке по имени для отладки)

Честно - нет.
Сталкивался с тем, что куки не хотели работать без старта сессии)
06.04.2012 в 21:30

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
Co0L, Сталкивался с тем, что куки не хотели работать без старта сессии)

Хи. Мне это ещё предстоит, если напрусь. Спасибо за предупреждение.
06.04.2012 в 21:55

Sanctus Satanas
вот те люди, которые написали десятки примеров по setcookie, у них всё в одном каталоге что ли?
Ну главное, не что в одном, а главное, что если при установке куки с точки зрения браузера это будет главный каталог, тогда и path будет "/". ;)
06.04.2012 в 21:57

( . )( . )админ
Моя читай, просто моя с инглишем не дружит особо

php.su/ - любой php программист знает этот сайт. Мануал к php на русском.

С гуглом твоя тож не дружит?
06.04.2012 в 21:59

Крайне злопамятное хамло ;)
любой php программист знает этот сайт. Мануал к php на русском.
Я вот его впервые вижу)) Даже через поиск ни разу не попадал :-D
06.04.2012 в 22:03

( . )( . )админ
Co0L, запрос к яндексу с именем любой функции php в выдаче дает этот сайт на первой позиции (на 0й идет тизер с php.net)
06.04.2012 в 22:06

Крайне злопамятное хамло ;)
2(che)n, аа, ну так к яндексу) Гугл этот сайт любит меньше)
06.04.2012 в 22:18

( . )( . )админ
ну так и я гугл люблю меньше
06.04.2012 в 22:30

The day that you stop running is the day that you arrive.
я попадал на этот сайт, но предпочитаю мануалы на оригинальном сайте.

Ryuzaki_rnd, ru2.php.net/setcookie - по этой ссылке(официальный мануал) первые и третий примеры - с указанием каталога.
06.04.2012 в 22:47

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
neo_rage, Тут мой косяк, моя не понял, что это про path речь ^^'

2(che)n, Ну пропустил, бывает.)