Официальная справка, а так же специализированная литература по программированию на языке РНР, даёт только основные руководства и поснения по использованию кукишей ($_COOKIE) в РНР и не даёт ответов на проблемные вопросы которые могут возникать в процессе использования кукишей ($_COOKIE) в РНР.
Далее даётся перечень известных проблем (особенностей) которые могут возникать в процессе использования кукишей ($_COOKIE) в РНР.
Имена для кукишей ($_COOKIE) в РНР
Если в качестве имени переменной вставить значение $_SERVER["REMOTE_ADDR"] (ИП посетителя), то при последующем поиске кукиша с именем $_SERVER["REMOTE_ADDR"] (ИП посетителя) мы его не обнаружим, а всё потому, что РНР при создании кукиша в его имя вставил не оригинальное значение $_SERVER["REMOTE_ADDR"], а изменил его до такого вида 193_34_75_139 заменив символ точки на символ подчёркивания ;) Так, что при установке имени кукиша имейте ввиду, что все символы точки в его имени автоматом преобразуются в символы подчеркивания!
Использование массива кукишей ($_COOKIE) в РНР
Для того чтобы не создавать кучу кукишей ($_COOKIE) в РНР с разными значениями которые нужно установить, можно создать массив кукишей следующим образом:
setcookie("cookie[0]", "value1"); setcookie("cookie[1]", "value2"); setcookie("cookie[2]", "value3");
проверить присутствует ли тот или иной элемент кукиша, например:
if(!isset($_COOKIE["cookieName"])) { foreach ($_COOKIE['cookieName'] as $name => $value) { echo "$name : $value <br>"; } }
Установка кукишей ($_COOKIE) в РНР
Установка Cookie осуществляется при помощи функции SetCookie(). Функция SetCookie() позволяет установить в Cookie шесть параметров:
- name - имя присвоеное Cookie (строка);
- value - значение переменной (строка);
- expire - время "жизни" Cookie (целое число). Если не указать значение данного параметра, то Cookie будут "жить" до завершения сессии. Если время "жизни" указано, то Cookie самоуничтожится по наступлении этого времени;
- path - путь к директории на сайте с которого доступен Cookie (строка);
- domain - домен с которого доступен Cookie (строка);
- secure - передача Cookie через HTTPS-соединение.
Как правило используются только первые три параметра.
Для того чтобы проверить успешно ли установлены кукиши ($_COOKIE) в РНР нужно перенаправить/обновить браузер пользователя и запросить установленные ранее кукиши ($_COOKIE). Запрашивать кукиши ($_COOKIE) в РНР сразу же после их установки бесполезно!
Если кукиши ($_COOKIE) отсутствуют, то это может говорить о том, что либо приём кукишей ($_COOKIE) запрещён в браузере пользователя или кукиши ($_COOKIE) были установлены с просроченным сроком действия!
Правильная установка кукишей ($_COOKIE) в РНР выглядит следующим образом:
Удаление кукишей ($_COOKIE) в РНР
Для удаления кукишей ($_COOKIE) в РНР нужно использовать ту же функцию, что и для установки COOKIE:
Для удаления кукишей ($_COOKIE) в РНР можно написать относительно универсальную функцию, которая будет способна удалять как обычные Cookie так и массивы Cookie, в качестве параметра будет достаточно передать этой функции только имя Cookie, а функция сама определит, что это - обычный Cookie или массив Cookie:
// Функция удаления кукишей и массива, ассоциативного массива, кукишей function clearCookie($name) { // если массив if(is_array($_COOKIE[$name])) { $cc = count($_COOKIE[$name]); // получаем нумерованный список элементов массива с их именами // так как массив кукишей может оказатся ассоциативным или же // начинатся не с 0, а например с 1, 2 или 3 $key = array_keys($_COOKIE[$name]); for($i = 0; $i < $cc; $i++) { setcookie($name.'['.$key[$i].']', "", time()-600); } setcookie($name, '', time()-600); } else { setcookie($name, '', time()-600); } }

