Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема с установкой кук


Автор: begin 21.10.2009, 19:53
Проверяю, есть ли кука. Если нет, то назначаю ей свежий номер из базы. Но даже после обновления страницы, скрипт не видит куку - каждый раз пытается ставить новую.
Код

if ($_COOKIE['chat']!==NULL)
{
$chat=intval($_COOKIE['chat']);
}
else
{
$query="select `id` from `t_chat` order by `id` desc";
$result=mysql_query($query, $db) or die(mysql_error());
$res=mysql_fetch_array($result);
$chat=$res['id']+1;
$query="insert into `t_chat` values ('')";
$result=mysql_query($query, $db) or die(mysql_error());
setcookie("chat", "$chat", time()+86400);
}


В другом скрипте кука ставится аналогично и без проблем:
Код

setcookie("user", "login", time()+86400);

и после обновления страницы кука нормально видна.

Автор: Kallisto 21.10.2009, 20:00
Дата и время на компьютере где запущен сервер и на вашем какие ? 

Автор: begin 21.10.2009, 20:29
Разница в 1 один час. Я живу в Украине, а сервер находится в России. Даты совпадают.

Автор: Ипатьев 21.10.2009, 20:36
выводить отладочную информацию.
смотреть, что в $chat (переменные, кстати, в кавычках не пишут)
смотреть, какой заголовок уходит браузеру

Добавлено через 25 секунд
проверка, кстати, странная

Автор: begin 21.10.2009, 20:45
Цитата(Ипатьев @ 21.10.2009,  20:36)
выводить отладочную информацию.
смотреть, что в $chat (переменные, кстати, в кавычках не пишут)
смотреть, какой заголовок уходит браузеру

Добавлено @ 20:36
проверка, кстати, странная

Значение переменной проверял - правильно берется из базы и увеличивается на 1.
Пробовал и с кавычками и без. Сейчас убрал.
А как посоветуете правильно проверить, установлена ли кука с таким именем?

Автор: Ипатьев 21.10.2009, 20:48
isset(), empty()

значение берется совсем неправильно.
вместо всего этого винегрета должно быть
Код

$query="insert into `t_chat` values ('')";
$result=mysql_query($query, $db) or die(mysql_error());
$chat=mysql_insert_id();

хотя странно. в этой таблице единственное поле?

Автор: begin 25.10.2009, 21:55
Цитата

isset(), empty()

попробовал оба варианта - не работают  smile 

Цитата

хотя странно. в этой таблице единственное поле?

да, эта таблица нужна для хранения счетчика.

Вобщем на всякий случай еще раз обрисую проблему: человек заходит на сайте в раздел Контакты. Там есть чат с менеджером сайта. В момент захода на страницу скрипт проверяет - установлена ли кука. Если нет, то берется самый последний id из таблицы, увеличивается на один. Это значение записывается в таблицу, а также на компе пользователя устанавливается кука с таким значением. Сама кука является идентификатором переписки посетителя с менеджером (чтобы одновременные переписки не накладывались друг на друга, а также не были видны остальным посетителям). Куку я ставлю на сутки, чтобы человек ведя чат с менеджером, мог время от времени уходить на другие страницы сайта. Когда возвращается в раздел Контакты, то все еще видит свою переписку. Но именно эта возможность у меня сейчас и не работает - каждый раз при открытии этой страницы скрипт не находит куку и ставит новую  smile 

Автор: Ипатьев 25.10.2009, 21:57
Цитата(begin @  25.10.2009,  21:55 Найти цитируемый пост)
попробовал оба варианта - не работают

значит, неправильно пробовал


Автор: begin 25.10.2009, 23:09
Делал вот так:

Код

if (isset($_COOKIE['chat']))
{
$chat=intval($_COOKIE['chat']);
}
else
{
$query="select `id` from `t_chat` order by `id` desc";
$result=mysql_query($query, $db) or die(mysql_error());
$res=mysql_fetch_array($result);
$chat=$res['id']+1;
$query="insert into `t_chat` values ('')";
$result=mysql_query($query, $db) or die(mysql_error());
setcookie("chat", "$chat", time()+86400);
}

и вот так:
Код

if (empty($_COOKIE['chat']))
{
$query="select `id` from `t_chat` order by `id` desc";
$result=mysql_query($query, $db) or die(mysql_error());
$res=mysql_fetch_array($result);
$chat=$res['id']+1;
$query="insert into `t_chat` values ('')";
$result=mysql_query($query, $db) or die(mysql_error());
setcookie("chat", "$chat", time()+86400);
}
else
{
$chat=intval($_COOKIE['chat']);
}

не работает ни то, ни то.

Автор: Ипатьев 26.10.2009, 08:34
да, проверка правильная.
если нужно, чтобы кука была доступна во всех каталогах сайта, надо ставить ее для корневого каталога, указывая это в параметрах.

Автор: begin 26.10.2009, 15:15
Цитата(Ипатьев @ 26.10.2009,  08:34)
если нужно, чтобы кука была доступна во всех каталогах сайта, надо ставить ее для корневого каталога, указывая это в параметрах.

вот, что я прочитал об использовании данного параметра в куках:
Цитата

По умолчанию только страницы, расположенные в том же каталоге или ниже в структуре подкаталогов того сервера, который установил cookie, могут прочитать ее значение.

У меня скрипт, устанавливающий куку и скрипт, ее проверяющий - один и тот же, и находится в в папке mysite.com/new
До этого я уже несколько раз делал подобное на других сайтах и тоже устанавливал куки не из корня сервера, а из вложенной папки. И скрипты из этой же папки нормально видели куки.
Пожалуйста объясните, если я что то не так понял. Но почему тогда именно в этот раз скрипт перестал видеть куки?

Автор: Ипатьев 26.10.2009, 15:21
Цитата(begin @  26.10.2009,  15:15 Найти цитируемый пост)
Но почему тогда именно в этот раз скрипт перестал видеть куки? 

Готового ответа на этот вопрос не существует. Надо разбираться.
Ставьте просмотрщик HTTP заголовков (есть в FireBug) и смотрите, какую куку ставит сервер. Возвращает ли ее браузер.
Тренируйтесь сначала без базу данных. Вы, собственно, проверили - возвращает ли она хоть что-нибудь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)