PDA

Показать полную графическую версию : Установка кукисов в php


programmist72
28-05-2006, 10:44
Люди, помогите кто-нибудь, совсем замучился!!! :( заранее спасибо тому, кто подскажет решение проблемы :)

В общем мне нужно установить cookie в php. Документ такого вида:



<?php
ob_start();
//здесь около 300 строк кода...
setcookie("cookie_name", $cookie_value, time()*64*3600);
echo $_COOKIE['cookie_name"];
ob_get_contents();
?>


Результат: я могу прочесь значение куки (и то не всегда), а самого файла куки не вижу.

И ещё один документ:


<?php
ob_start();
if (!isset($_POST['show']))
{
?>
<form method='post'>
Введите ваш логин:
<input name='log'>
<input type='submit' name='show'>
</form>
<?php
}
else
{
setcookie('login', $_POST['log'], time()*3600);
ob_get_contents();
echo $_COOKIE['login'];
}
?>

А здесь такая ситуация: я ввожу "22" - в ответ ничего. Потом ввожу "abc" - в ответ "22". Потом ввожу "111" - в ответ "abc". В общем, значение cookie отстаёт от того значения, которое должно реально храниться в файле ровно на 1 шаг. Почему так происходит? Что я не так делаю? И как вообще ставить куки в середине документа?
Всем спасибо за любые подсказки! :)

Prisoner
28-05-2006, 12:12
Прочтите мануал по ob_get_contents (http://ru.php.net/ob_get_contents). Возвращать-то она контент возвращает, но его бы еще и использовать. Хотя бы в echo. попробуйте, возможно глюк в этом месте. Что касается самого файла куки не вижу., то зачем вам собственно файл кукисов? Этот файл есть суть внутренний механизм обработки и хранения кукисов. Прямой доступ к ним абсолютно не нужен, более того теоретически невозможен. Что качается я могу прочесь значение куки (и то не всегда), то кука, установленная силами сервера, будет видна после ее установки, т.е. при следующей загрузке любой из страниц домена на котором она была установлена.

vadimiron
28-05-2006, 13:33
time()*3600
а что это такое??? time()+3600 имелось в виду?? (хотя конечно глюк не в этом, а в том, чо сказал Prisoner в последнем предложении)

programmist72
28-05-2006, 15:02
time()*3600 - имелось в виду именно то что написано - такое время хранения куки.
Prisoner, сейчас посмотрел ссылку на мануал - у меня хоть английский на нормальном уровне, но что-то я там мало могу понять. Дано просто базовое описание функции и всё. А в echo использовать пытался - ничего не выдаёт. Но у меня до вызова функции ob_get_contents() идёт куча кода, да ещё html и php вперемешку... может поэтому?...

Да, кстати! забыл сказать. Когда я захожу в папочку где хранятся файлы куки - внизу написано "Restricted sites" и нарисован красный значок. Это не в тему, наверное, но может в этом тоже причина? Прикладываю скриншот к этому посту, он 2 кб весит БЕЗ ВИРУСОВ!!! :))). Кто из моих слов не поймёт что происходит, скачайте файлик.

Prisoner
28-05-2006, 16:01
programmist72, еще раз говорю - незачем смотреть в места хранения файлов кукисов в системе. Откуда тебе знать, вдруг сброс в файлы происходит при последнем уничтожении процесса IE? Мало ли. Не заморачивайся.
По поводу ob_get_contents() в мануале сказано, что функция возвращает буфер вывода. Куда он у вас возвращается? В переменную? Нет. Выводится? Нет. Куда? Никуда. Функция просто отрабатывает. Впустую.
time()*3600 - vadimiron, ты внимателен :). programmist72, очень даже может быть, что глюк как раз и в произведении. Смотри сам, примерно текущий UNIX timestamp - 1148817241, умножь его на 3600. По сути это примерно 36 лет * 3600 = 129600 лет. Зачем тебе такая живучая кука? :). Возможно, что некорректно обрабатывается как раз столь большое значение и бывают глюки. Это маловероятно, но тем не менее такая запись более чем лишена смысла. Достаточно поставить и +1 год относительно текущего времени.

Igor_I
28-05-2006, 23:14
<?php
Запрос:
Браузер (отослал куку) -> сервер (перевел в массив $_COOKIE)

ob_start();
if (!isset($_POST['show']))
{
?>
<form method='post'>
Введите ваш логин:
<input name='log'>
<input type='submit' name='show'>
</form>
<?php
} else {
setcookie('login', $_POST['log'], time()*3600);
ob_get_contents();
echo $_COOKIE['login'];
}

Ответ:
сервер (установил куку) - > браузер (записал куку)
?>
Поправьте, если я не прав.




© OSzone.net 2001-2012