Как php работает с cookie.

Механизм cookie необходим, чтобы хранить на стороне клиента небольшие объемы данных. Например, когда браузер предлагает сохранить логин и пароль для какого-либо сайта, то он их помещает в cookie. Естественно для разных web-сайтов будут созданы отдельные файлы. К примеру, браузер Internet Explorer сохраняет все в текстовых файлах в папке Cookies.
Имя файла будет образовано от имени пользователя, под которым вы зашли в систему и от домена, который вы посетили.

Кстати, я провел один эксперимент. Посетил сайт с голосованием и после того, как я отдал голос за один из вариантов, у меня в папке cookies создался соответствующий файл. При попытке проголосовать снова, мне отказали. Тогда я разозлился и удалил файл из Cookies. И ресурс подумал, что я никогда и не
голосовал. Но это не всегда может сработать. Более продвинутые сайты, насколько я понял, помимо cookie, используют защиту от накрутки по ip. И еще всякие фичи, которые пока я не знаю.

Давайте теперь перейдем непосредственно к практике.
Чтобы создать cookie, надо воспользоваться функцией setcookie(имя_cookie, значение, время жизни). Я сделал небольшой пример, который демонстрирует механизм cookie.

Листинг файла index.php

<?
//проверка на наличие cookie
if (!isset($_COOKIE['mycook']))
{
setcookie('mycook','теперь ты знаешь как работает cookie',time()+15);
// редирект на cookie.php
header("Location: cookie.php");
}
else echo"ты уже знаешь как работает механизм cookie";

?>

Листинг файла cookie.php

<?
echo $_COOKIE['mycook'];
?>

Сначала идёт проверка. Если файл cookie существует, то на экран выведется “ты уже знаешь как работает механизм cookie”.
Если cookie не существует, то мы её создаем и переходим с запросом в другой скрипт, где вытаскиваем значение cookie.

time()+15 - таким образом, я указал, что cookie будут храниться ровно 15 секунд, после создания. То есть если вы обратитесь к скрипту cookie.php через, скажем 20 секунд, то уже ничего не увидите, так как cookie уже будет удалён из системы.
Если вы хотите удалить вручную, то просто укажите в setcookie() один параметр - имя этой самой куки.

Хочу обратить внимание на одну вещь. Создавать cookie надо перед html текстом, оператором echo и всеми вещам, которые отправляются браузеру. Так как setcookie() посылает браузеру заголовок с именем Set-Cookie. А все заголовки надо передавать до команд вывода.





Читайте также:



23 Ответов на “Как php работает с cookie.”

  1. lena

    Можно ли сохранять в куках логин и пароль пользователя, можно ли прочитать куки каким нибуть способом? Я имею ввиду взлом сайта.. И наконец можно ли подставить свой логин на чужом сайте где используется такая методика?
    Я пишу свой собствений сайт, поетому нужна ваша косультация… Как безопасней записовать дание юзера для его индетефекацие на сайте…

  2. novice

    Есть некоторые виды хакерских атак, используя которые злоумышленник может получить доступ к cookie ваших посетителей, если вы храните там пароли.
    Я логин/пароль храню в БД. Каждый раз когда человек заходит на сайт - он может залогиниться в специальной форме. Данные которые он вводит в форму(логин/пароль) я проверяю на наличие в БД. Если такие есть то в переменную сессии записываю что-нибудь вроде $_SESSION[‘is_logged’] = true; и дальше уже работаю с этой переменной.

  3. lena

    Да ето полезно, но что делать если мне для індетефикации нужно лиш логин человека… Хим! хорошая идея… Можно зделать при авторизации запись в куки логина и какова нибуть набора цифир, которий будет уникальний для каждива человека.. Набор цифир будет служить как индетификатор, а логин как дополнительний инструмент… Как ви считаете? Безопосним етот метод будет, если внимание будет приделено лиш набору цифир, а логин просто второстопеним… (соррі русскоим язиком не владею (правописанием :-( ))

  4. lena

    Кстати как посмотреть все установление значения в куках?
    вот етой переменой

    print_r($_COOKIE); // виводет все записи установление у куках…

  5. booba2003

    Кстати для определения голосовал пользователь или нет пожно использовать две полезные пердопределенные переменные в сочетании: $_SERVER[‘REMOTE_ADDR’], $_SERVER[‘HTTP_X_FORWARDED_FOR’]. Первая известна, а вот вторая переменная не описана в офицальной документации(по крайней мере не встречал). Эта переменная принемает на себя внутренний(серый) IP клиента

  6. Можно еще другим способом проверить

  7. Лучше всегда используйте в своих проектах сессию чем куки, и храните все пароли в базе в виде md5. Так все делают.

  8. Vladimir

    Может быть и все используют сессию для авторизации, но для автоматической авторизации на форуме без cookie не обойтись. У меня вопрос: из-за чего может не работать cookie? В броузере они включены, на разных сайтах они работают, но не работают на одном, который я разрабатываю

  9. Vladimir
    Возможно хостинг с которым ты работаешь(если он бесплатный) отключает возможность использования.

  10. Так как мне записанные куки обработать в скрипте? Типа if(isset($_COOKIE[‘bugaga’])) { … } else { … } ?

  11. Помоему, нужно больше примеров. Особенно про безопасность куков.

  12. Painerman

    Здравтвуйте!
    Правильно ли я понимаю, что при включенном register globals - cookies ставятся и уже используются в том же файле, а с выключенным register globals - cookies ставятся, но могут использоваться лишь в следующем загруженном файле, т.е. после перехода.

    $ddd=”Vasia”;
    if(empty($_COOKIES[“ddd”]) setcookie(“ddd”,$ddd);
    echo $_COOKIES[“ddd”]; #При первом выполнении говорит что нет такой переменной, Нажимаю обновить и вижу Vasia.

    Это работает лишь при второй загрузке этого файла, почему и как обойти?
    Спасибо за ответ!

  13. Painerman, так и задумано, ибо такова спецификация куков. если например ты в script.php задаешь куку и пытаешься ее сразу же вывести - фига. кука невидима до загрузки следующей страницы

  14. Painerman

    Однако кука все-таки после установки видима при register_globals On.
    Вот о таких тонкостях умалчивается. Спасибо за ответ, добрые люди! На всяких dklab и phpnet уже бы нах послали!
    Еще раз спасибо!

  15. Да не за что в общем то =)

  16. Виктор

    мудило, одной строчки “Если файл cookie существует, то на экран выведется “ты уже знаешь как работает механизм cookie”.” уже достаточно для того, что бы понять, что слово PHP ты впервые прочитал, отсасывая мараканскому торговцу мандаринами, так как оно было написано на его пенисе

  17. Painerman

    Простите, Господин. Не все такие продвинутые и разносторонне развитые.

  18. Виктор, а не убиться бы тебе об стену? Ты сам скорее всего никто, ибо нормальный кодер, да и вообще человек, более адекватен и всегда старается помогать новичкам. ЛОЛ

  19. Даня

    Простите, а у меня куки не становятся видны после перехода по оператору header! Только если обновлю страницу (нажимаю назад и снова пройти index.php), тогда куки работают как надо. Что не так, подскажите, пожалуйста!

  20. Painerman

    Дань, попробуй мета редирект, а еще я с этим борюсь так:
    после setcookie(“кука”,1,time()+666) ставлю $_COOKIES[“кука”]=1

    После этого куку можно использовать сразу.

  21. Даня, отправляй сначала куку и только потом редирект через header()

    инфа о Location передается в заголовках вместе с куками, поэтому браузер может редирект сделать, еще и не записав куки

  22. HUI

    vi vse pidorasi, slava allahu
    P.S a 4e Lena mol4it? Lena 2$ za otsos, ok

  23. А использование строчки header обязательно?


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map