Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Установка кукисов в php (http://forum.oszone.net/showthread.php?t=66351)

programmist72 28-05-2006 10:44 443360

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

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


PHP код:

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

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

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

PHP код:

<?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 443384

Прочтите мануал по ob_get_contents. Возвращать-то она контент возвращает, но его бы еще и использовать. Хотя бы в echo. попробуйте, возможно глюк в этом месте. Что касается
Цитата:

самого файла куки не вижу.
, то зачем вам собственно файл кукисов? Этот файл есть суть внутренний механизм обработки и хранения кукисов. Прямой доступ к ним абсолютно не нужен, более того теоретически невозможен. Что качается
Цитата:

я могу прочесь значение куки (и то не всегда)
, то кука, установленная силами сервера, будет видна после ее установки, т.е. при следующей загрузке любой из страниц домена на котором она была установлена.

vadimiron 28-05-2006 13:33 443406

Цитата:

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

programmist72 28-05-2006 15:02 443427

Вложений: 1
Цитата:

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

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

Prisoner 28-05-2006 16:01 443443

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

Igor_I 28-05-2006 23:14 443548

PHP код:

<?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'];   
}

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

Поправьте, если я не прав.


Время: 21:28.

Время: 21:28.
© OSzone.net 2001-