Cookies, это просто.

Нет комментариев

Ну, вот мне неожиданно понадобилось использовать возможность узнавания пользователя сайтом. Это когда вы приходите на сайт, а сайт помнит, что вы тут уже были.

Начал я разбираться как это работает.

Для тех, кто не читал другое мое «творчество» на этом сайте я скажу, что я только учусь. А для чего я все это пишу?
Да для тех людей, которые тоже захотят чему-то научится, я тут пишу максимально простым и понятным языком. Потому, что везде написано так, как будто у всех уже есть навыки программирования.

Ну и как обычно на конкретном примере разберем это чудо cookies.

Cookies - это текстовые строки, хранящиеся на стороне клиента, и содержащие пары «имя-значение», с которыми связан URL, по которому браузер определяет нужно ли посылать cookies на сервер.

Вот по другому:
Сookies предназначены для хранения сведений о пользователях . При использовании, файлы с cookies хранятся на компьютере пользователя, и по запросу отсылаются браузером серверу.

А если по простому:
Сookies это такой файлик который создается браузером в специальное папке в котором хранятся некоторые данные. Например Ваше имя или время Вашего последнего посещения это сайта, а может даже какие-то специфические настройки для этого конкретного сайта, которые будут активироваться при каждом входе на сайт.

Ну немного запутанно, но сейчас на примере я думаю мы четко разберемся как это работает и будем использовать на своих сайтах.
Кстати мне раньше казалось, что эти «печенки» (так переводится это слово, уж не знаю почему, но вот так их назвали разработчики Netscape Navigator’а. По моим сведениям это они придумали их), так вот мне казалось, что эти самые «печенюхи» что-то невообразимо трудное и непонятное. Как оказалось, нет.

Ну что давайте сначала сообразим тестовую страничку с именем test.php,
страничку над которой мы будем экспериментировать. Пишем или «копипастим» (лучше писать самому запоминается лучше) вот от сюда:

1
2
3
4
5
6
7
8
9
10
11
12
13
<html><head>
<title>Эксперименты
с COOKIES</title>
</head>
<body
bgcolor="#770001" text="#fecb29" >
<h2>Пример
работы с cookies</h2>
<br><br>
<p
align="center">
Здравствуйте!
</p></body></html>

У вас должно получиться вот такое:
Теперь смотрим, что у нас есть на этой странице?
А есть у нас вот что:
цвет фона
цвет шрифта
приветствие

Вот и давайте сделаем так чтобы человек, который пришел на ваш сайт мог сам настроить себе цвет фона и цвет шрифта и пр., но сделаем это так, чтобы он пришел на вашу страничку через 3-5-10-много дней и у него эти настройки сохранились.

Правда есть условие, он должен будет зайти этим самым браузером. Ну и соответственно в браузере должна быть включена возможность работы с cookies.

Для начала надо сказать, что в PHP есть специальные встроенные функции для установки cookies:
SetCookie()
Для этой функции существует шесть параметров, но обязательным является только «name».

  • name — задает имя Cookie;
  • value - значение переменной;
  • expire — задает время, которое будет существовать этот cookie, если этот параметр не указывать, то этот конкретный cookie уничтожится после окончания сессии, т.е. сразу как Вы закроете браузер
  • path — путь к Cookie ;
  • domain — домен . Указывается путь, откуда будет доступен этот cookie. По умолчанию (если не указывать), то устанавливается имя хоста, с которого Cookie был установлен, текущая директория и директории, которые ниже по иерархии.
  • secure — передача Cookie через защищенное HTTPS-соединение.

Обычно используются только три первые параметра.
Есть еще одно ограничение в работе с «Куками»:
Они должны записываться до того как браузер выведет что-либо на экран.
Ну, вот вроде уже пора начинать править нашу страничку.

Добавляем перед всем нашим кодом вот такое, и я сейчас все объясню:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$name=$HTTP_POST_VARS[name];
$bg=$HTTP_POST_VARS[bg];
$font=$HTTP_POST_VARS[font];
if(IsSet($name,$bg,$font)){
setcookie("name",$name,0x6FFFFFFF);
setcookie("bg",$bg,0x6FFFFFFF);
setcookie("font",$font,0x6FFFFFFF);
}

<html>
<head>
<title>Эксперименты
с COOKIES</title>
</head>
<body
bgcolor="#770001" text="#FECB29" >
<h2>Пример
работы с cookies</h2>
<br><br>
<p
align="center">
Здравствуйте!
</p>
</body>
</html>

Вот так выглядит ваш файл изнутри. Далее мы сделаем форму в которую мы будем вставлять значения для изменения наших переменны которые и будем записывать в cookie.

$name=$HTTP_POST_VARS[name];
$bg=$HTTP_POST_VARS[bg];
$font=$HTTP_POST_VARS[font];

Так вот эти три строчки у нас выполняют функцию считывания значений в переменные, до того как они изменятся при обновлении страницы. Если они отправлены.

if(IsSet($name,$bg,$font)){
setcookie(«name»,$name, 0x6FFFFFFF);
setcookie(«bg»,$bg, 0x6FFFFFFF);
setcookie(«font»,$font, 0x6FFFFFFF);
}

А вот тут тоже все просто.
Если прочитать по-русски этот код, то будет так:
«Если существуют переменные $name, $bg и $font, то запишем эти переменные в cookies.
В cookies «name» запишем переменную $name на время 0x6FFFFFFF
В cookies «bg» запишем переменную $bg на время 0x6FFFFFFF
В cookies «font» запишем переменную $font на время 0x6FFFFFFF».

Кстати вот этот параметр 0x6FFFFFFF значит на очень долго «практически навсегда», ну а если точнее, то до 18 июля 2029 года. Вот так эта дата выглядит в восьмеричном виде.

Кстати дату можно указывать и по-другому:
setcookie(«name»,$name, time()+3600);
Такая запись будет обозначать запись cookie на 1 час
time() — это текущее время , ну и прибавляем 3600 секунд.
А можно указать время вот так:
$time= mktime(0,0,0,1,1,2010);
setcookie(«name»,$name,$time);
Для удобства сделали переменную $time и функцией mktime() присвоили ей время.

Синтаксис mktime() выглядит вот так:
mktime(час, минута, секунда, месяц, число, год) именно таком порядке
С этим участком я надеюсь все понятно. Едем дальше.
У нас уже есть страничка, которая может записать нам переменные в «куки», но нам ведь надо их где-то взять. А вот для этого мы сделаем форму ввода наших персональных данных.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<div
style='position:absolute;top:300px;width:85%;height:300px;align='center'>
<form
method='POST' action='test.php'>
<p
align='right'><b>Имя</b>   <input type='text'
name='name' size='30'><br><br>
<b>Цвет фона</b>   <select
name='bg'>
<option
value='#000000'>черный
<option
value='#ffffff'>белый
<option
value='#cccccc'>серый
<option
value='#770001'>бордовый
<option
value='#80D5FE'>голубой
</select>
<br><br>
<b>Цвет шрифта</b>  
<select name='font'>
<option
value='#000000'>черный
<option
value='#ffffff'>белый
<option
value='#cccccc'>серый
<option
value='#770001'>бордовый
<option
value='#80D5FE'>голубой
</select>
<br><br>
<input
type='submit' value='Ok' ></p></form><br>
</div>

В этой форме нас интересует строчка
<form method=’POST’ action=’test.php’>
В ней мы определяем, каким методом будем отправлять данные POST или GET в нашем случае это не так важно, и имя файла который будет обрабатывать наши данные у нас это test.php.

А еще в этой форме нам нужны имена полей ввода данных, которые у нас совпадают с именами переменных, которые мы запишем в наши cookie, а именно:
name=’name’
name=’bg’
name=’font’

Ну, вот теперь последний штрих надо обозначить места в нашем коде, куда мы будут подставляться наши полученные переменные, которые будут из формы записываться в cookies, а потом считываться от туда и подставляться в нужное место.
Окончательный код выглядит вот так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$name=$HTTP_POST_VARS[name];
$bg=$HTTP_POST_VARS[bg];
$font=$HTTP_POST_VARS[font];
if(IsSet($name,$bg,$font)){
setcookie("name",$name,0x7FFFFFFF);
setcookie("bg",$bg,0x7FFFFFFF);
setcookie("font",$font,0x7FFFFFFF);
}

<html>
<head>
<title>Эксперименты с COOKIES</title>
</head>
<body
bgcolor="<?php echo $bg;?>" text="<?php echo
$font;?>" >
<h2>Пример работы с cookies</h2>
<br><br>
<p
align="center">
Здравствуйте
<?php echo $name;?>!
</p>
<div
style='position:absolute;top:300px;width:85%;height:300px;align='center'>
<form
method='POST' action='test.php'>
<p
align='right'><b>Имя</b>   <input type='text'
name='name' size='30'><br><br>
<b>Цвет фона</b>   <select name='bg'>
<option
value='#000000'>черный
<option
value='#ffffff'>белый
<option
value='#cccccc'>серый
<option
value='#770001'>бордовый
<option
value='#80D5FE'>голубой
</select>
<br><br>
<b>Цвет шрифта</b>  
<select name='font'>
<option
value='#80D5FE'>голубой
<option
value='#000000'>черный
<option
value='#ffffff'>белый
<option
value='#cccccc'>серый
<option
value='#770001'>бордовый
</select>
<br><br>
<input
type='submit' value='Ok' name='b1'></p></form><br>
</div>
</body>
</html>

Обратите внимание, у нас в свойствах тега <body> поменялись значения
bgcolor=»#770001″ на bgcolor=»<?php echo $bg;?>»
text=»#FECB29″ на text=»<?php echo $font;?>»
а после слова «здравствуйте» добавилось <b><?php echo $name;?></b>
Теперь можно отправить этот вариант на сервер и попробовать, как он работает.

Кстати, обратите внимание, при первом запуске у вас фон будет белым, а шрифт черным, это такие умолчания у браузера потому, что при первом запуске у вас нет ни одной переменной, которую можно вставить вот браузер, и считает, что у вас цвет фона и шрифта не прописан.

Это можно легко исправить добавляем вот такой код ниже первого блока кода php:

1
2
3
4
5
6
if(!IsSet($name,$bg,$font)){
$bg =
"#770001";
$font = "#ffffff";
$name = "Незнакомец";
}

Видите восклицательный знак перед IsSet? Так вот из за него выражение звучит вот так:
«Если переменных $name, $bg, $font нет, то пусть они появятся и будут равны тому-то и тому-то. Мы это сделали для людей, которые или только первый раз зашли на вашу страницу или просто не хотят ничего тут настраивать, вот для них вы можете поставить вид странички по умолчанию.

Вот так, очень просто, как выясняется, работают эти самые «кукисы».

На самом деле тут показан только основной принцип работы, а вообще возможностей для творчества в этом направлении достаточно. И каждый сам может придумать, как извлечь из этого пользу.
Например, можно организовать простейший счетчик:

1
2
3
4
  $counter++;
  setcookie("counter",$counter);
  echo("Вы посетили эту страницу $counter
раз"
);

Тут даже объяснять нечего. Берется переменная, прибавляется к ней единичка и записывается в cookie, и сразу выводится сообщение.
При следующем входе на страничку из cookie извлекается эта переменная и снова увеличивается на 1, записывается и выводится и так до бесконечности.
Но вот что надо уточнить доступ к переменной cookie напрямую можно получить только если на вашем сервере включена директива register_globals, если она не включена, то получить доступ «куке» как глобальной переменной не получится.
А что делать? Все просто эта переменная все равно будет доступна вам, но только через глобальные массивы $HTTP_COOKIE_VARS[«name»] и $_COOKIE[«name»] выглядеть это будет вот так:

1
2
3
  $_COOKIE['counter']++;
  setcookie("counter",$counter);
  echo 'Вы посетили эту страницу '.$_COOKIE['counter'].' раз';

Вот таким $_COOKIE[‘counter’] образом мы получили эту переменную из глобального массива.
Ну, вот и все вроде бы. То, что я тут нацарапал должно для начала хватить. И тем более позволит понять дополнительную и более профессиональную информацию которую можно найти на сайтах-справочниках посвященных работе с PHP.

04
Авг
2009

Оставить комментарий