Особенности (проблемы) использования кукишей ($_COOKIE) в РНР

archive view archive save

cookies-php1 Официальная справка, а так же специализированная литература по программированию на языке РНР, даёт только основные руководства и поснения по использованию кукишей ($_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 шесть параметров:

  1. name - имя присвоеное Cookie (строка);
  2. value - значение переменной (строка);
  3. expire - время "жизни" Cookie (целое число). Если не указать значение данного параметра, то Cookie будут "жить" до завершения сессии. Если время "жизни" указано, то Cookie самоуничтожится по наступлении этого времени;
  4. path - путь к директории на сайте с которого доступен Cookie (строка);
  5. domain - домен с которого доступен Cookie (строка);
  6. secure - передача Cookie через HTTPS-соединение.

Как правило используются только первые три параметра.

Для того чтобы проверить успешно ли установлены кукиши ($_COOKIE) в РНР нужно перенаправить/обновить браузер пользователя и запросить установленные ранее кукиши ($_COOKIE). Запрашивать кукиши ($_COOKIE) в РНР сразу же после их установки бесполезно!

Если кукиши ($_COOKIE) отсутствуют, то это может говорить о том, что либо приём кукишей ($_COOKIE) запрещён в браузере пользователя или кукиши ($_COOKIE) были установлены с просроченным сроком действия!

Правильная установка кукишей ($_COOKIE) в РНР выглядит следующим образом:

SetCookie("user[0]", "", time()+3600);

Удаление кукишей ($_COOKIE) в РНР

Для удаления кукишей ($_COOKIE) в РНР нужно использовать ту же функцию, что и для установки COOKIE:

SetCookie("Test", "", time()-3600);

Для удаления кукишей ($_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);
    }
}

Автор: Олег Головский


Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

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

Вы можете стать первым, кто добавит комментарий к этой записи.

Комментарии в блоге
Новое на форуме