Всё, что касается Cookies. Faq

Статус
Закрыто для дальнейших ответов.

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Вопросы по cookie


1. Как создать безлимитный cookie(или таких нет?)
2. У меня есть checkbox(запомнить меня)
Мне надо создать cookie с какими данными если checkbox выглядит так:
Код:
<input type="checkbox" name="save" value="save">
Какого вида кука?(я создаю условие)

так делается?
Код:
if (isset($save)){
setCookie("gun", $name, time()+3600)
}
Потом у меня на всех страницах приветствие
Код:
echo "Приветствуем вас $gun";
Помогаем :biggrin:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
безлимитные это т.е которые не зависят от времени? значит просто не указываем время хранения, тогда будут доступны на один сеанс работы с браузером :) обычно указывают далекий-далекий год(например одна кука от ИТ заканчивается у миня в 2036-01-18, по крайней мере так показала опера). Чтобы приветствовать, нужно взять печенье на стороне пользователя (массив $_COOKIE)
Код:
if (isset($_COOKIE['gun']))
{
  echo 'Приветствуем вас'.$_COOKIE['gun'];
}
При использовании кукисов нужно проверять включены ли они у пользователя, все данные, которые в них сохраняются-шифровать, а при получении проверять, и самое главное не хранить в них логин и пас.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
А почему не хранить Логин!
Я же пароль не храню, а только логин
А если не логин то надо делать шифровалку?
Ну то есть взять и сделать два поля
В одном имя, а в другом логин?
А нельзя просто через логин? :huh:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
не я грю о том, что и логин и пароль хранить вместе в куках не желательно дело в том, что куки можно украсть у пользователя, значит некто может получить доступ к чему-то, конечно в том, что куки украли будет виноват пользователь, но...в общем решать вам. а шифровалку желательно делать для всего :) .
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
:blink: У меня пароли в md5 формате все
В MySQL
Кстати твоё предложение не пошло! $_COOKIE['gun'] !
Наверное потому, что я топ часть инклюжу
В это время кукиес не грузит может быть? Я не знаю в чём проблема!
Или я не правильно заполняю cookie!
Скажи правильно или нет

В предыдущем файле пользователь вводит ник с name='name' т.е.
Код:
Введите ник: <input type="text" name="name" value="">
затем из формы у меня идёт в файл reg.php(на название не смотри там не только регистрация!)
Я делаю вот так:
Код:
if ($_GET['event'] =="enter"){ //Проверяем на наличие в event=enter(get)
if (isset($save)){ //Проверяем на галочку(поставлена или нет)
setCookie("gun", $name, time()+3600); //Задаём cookie(вот здесь я не очень уверен в правильности)
}
// А дальше проверяем есть ли такой пользователь в базе или нет! :sad: 
$res=mysql_query("SELECT * FROM `clan_reg` WHERE `password`='" . md5($password) . "' AND `name`='" . $name . "' LIMIT 1");
$i=@mysql_fetch_assoc($res);
if (!empty($i)) {
echo "Спасибо за вход";
}else{
echo "ХХХ Вы ошились XXX!!!";
 }
}
Вот так вот

А потом у меня должно пичатать в инклюженном уже ранее top.php(но как это сделать она же уже напечатана?)
Помогаем! :wacko:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
у тя ошибки выводятся какие? типа "Warning: Cannot modify inf.....", просто куки сетить надо до вывода какого нить текста. setcookie("gun", $name, time()+3600); должно прокатить, если кнечно в $name что-то есть. после выполнения скрипта проверь наличие кук в браузере.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Оо круто всё пошло!!!(после того как я поставил определение кукисов в начало)

Теперь другой вопрос как сделать завершение кукиса(то есть непосредственный выход из авторизации)
Ну например у меня приветствие:
Приветствую вас ZiTosS
Мне нужно чтобы можно было завершить сеанс кука то есть сделать опять приветствие гостя!
Как это сделать?

В IPB есть такое:
Код:
<a href="{$this->ipsclass->base_url}act=Login&amp;CODE=03&amp;
k={$this->ipsclass->md5_check}">{$this->ipsclass->lang['log_out']}</a>
Я не понимаю что за href здесь
То есть вот это:
Код:
act=Login&amp;CODE=03&amp;k={$this->ipsclass->md5_check}
Помогите! :huh:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
кукис будет доступен пока он есть :), т.е его надо будет просто убить эм... или установить область видимости для определенного каталога, кстати для безопасности еще хорошо бы прописать какому домену позволено юзать эти куки.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Ну вот я и спрашиваю как убить куки!
А как прописать какому домену позволено юзать эти куки?
И ещё как ставить области видимости?

p.s. Я знаю, что задаю много вопросов, но что же поделать?! :laugh:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
1.для удаления куки нужно вызвать setcookie("gun");
2.setcookie("gun", $name, time() + 234523, "/tuta direktorija/", ".server.com", 1); первые три параметра уже известны. четвертый означает директорию. пятый домен, шестой если не указать то по HTTP, если 1, то только HTTPS. в поддиректориях вот этой "/tuta direktorija/", доступ к кукам будет. лучше всего все-таки в книжках или мануале посмотреть там и примеры должны быть :)
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Просто удалить, вызвав setcokie("gun");
Она удаляется так или принимает нулевое значение или что-то ещё?
А книжки у меня три(Котеров, Харрис, Просто какая-то)
Там есть про cookies но не очень разборчиво!
THX тебе за всё! :biggrin:
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
печенье с названием "gun" должно удалиться
p.s. не за что, стараюсь помочь чем могу :)
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
У меня проблема!
Я же cookie задаю в начале
А потом пытаюсь его удалить
вот код всей страницы:
Код:
<?
if (isset($save)){
setCookie("gun", $name, time()+234523);
}
include "config.php";
include "mysql_connect.php";
include "top.php";

if ($_GET['event'] =="reg"){
$pass=md5($password);
mysql_query("INSERT INTO clan_reg SET name='$name',password='$pass',email='$email',city='$city'");
}

if ($_GET['event'] =="enter"){
$res=mysql_query("SELECT * FROM `clan_reg` WHERE `password`='" . md5($password) . "' AND `name`='" . $name . "' LIMIT 1");
$i=@mysql_fetch_assoc($res);
if (!empty($i)) {
function thanks(){
global $THX;
$THX .= <<<EOF
  <tr>
	 <td width=10 background="images/hr.gif"></td>
	 <td width=730 bgcolor=#E4E4CF><h3><center>Cпасибо!Вы авторизированы!<br>Теперь вам разрешены полнофункциональные возможности!</center></h3></td>
	 <td width=10 background="images/hr.gif"></td>
  </tr>
EOF;
echo $THX;
return $THX;
}
thanks();

}else{
setCookie("gun");
function error(){
global $ERR;
$ERR .= <<<EOF
  <tr>
	 <td width=10 background="images/hr.gif"></td>
	 <td width=730 bgcolor=#E4E4CF><center><font color=#ff0000>Ввод не верен!!!<br> Перейдите по ссылке - <a href='tools.php?event=enter'><b>Введите заново данные</font><center></b></a></td>
	 <td width=10 background="images/hr.gif"></td>
  </tr>
EOF;
echo $ERR;
return $ERR;
}
error();
}
}

include "foother.php";

?>
в строке N 33 где я пишу setCookie("gun");
Он выдаёт ошибку типа:
Warning: Cannot modify header information - headers already sent by (output started at k:\home\localhost\www\proect\top.php:3) in k:\home\localhost\www\proect\reg.php on line 33

Я понимаю, что у меня ошибка, но где она? :huh:

Я пытаюсь удалить кукис, когда в базе данных нет введённого пользователя!
Если этого не сделать то даже если не правильно введены данные в форму
На главной будет приветствовать типа пользователя
А это ошибка!!!
Как мне от неё избавиться?
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
значит в файле top.php есть вывод текста, вообще (по крайней мере как я делаю) сначала провожу все рассчеты, вывод же страницы с результатами в последнюю очередь. Если же этого никак не сделать, а вывод данных необходим, юзаем буферизацию, управление которой осуществляется ф-ми ob_start() и ob_end_flush(), если эти функции не применять, то в php.ini устанавливаем директиву output_buffering.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Так я и не могу удалить кукис, при выходе из аккаунта! :excl:
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Я бы хотел дополнить в тему об удалении кукисов, R1S забыл упомянуть, что необходимо при удалении необходимо указывать все дополнительные параметры.

Пример:
Создание: setcookie("gun", $name, time()+3600);
Удаление: setcookie("gun", $name, time()-3600);
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Блин... Удалить не получается! :blink:
Опять таже ошибка:
Warning: Cannot modify header information - headers already sent by (output started at k:\home\localhost\www\proect\top.php:3) in k:\home\localhost\www\proect\top.php on line 37


А вот кусок кода этой страницы(это верх скрипта
):
Код:
  ... <td class="ahref" height=25 align=center colSpan=3 background="images/priv.gif">
  <?
 if(@$_GET['who']=="guest"){
  setCookie("gun",$_COOKIE['gun'],time()-234523); // или же ("gun",$name,time()-234523)
   } 

 if(!isset($_COOKIE['gun'])){
	echo 'Приветствуем вас Гость';
 }else{
  echo 'Приветствуем вас <b>'. $_COOKIE['gun']. '</b> <a href=index.php?who=guest>(Выйти)</a>';
 }
   ?>
  </td>...
Я думал может не определен кукис(то есть setCookie('gun',$name,time()+234523)),
Но если даже я пытаюсь определить cookie, поменяв - на +
Всё равно выдаётся ошибка warning:...

Может кто знает в чём проблема?
 

R1S

Well-Known Member
Регистрация
11.01.2006
Сообщения
160
Alex, вот это я понимаю выводится всегда
Код:
  <td class="ahref" height=25 align=center colSpan=3 background="images/priv.gif">
, если так, то HTTP заголовки уже отправлены, потому и возникает ошибка. Куки нажно сетить до отправки заголовков.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Ок понял, сделаем! :biggrin:
Это значит, что все задачи выполнются до входа в html?
Тогда я всё понимаю! :cool:
 
Статус
Закрыто для дальнейших ответов.
Верх Низ