аватар Автор: Сергей Касаткин | 24 мая 2017 17:34

Уроки / PHP /

11. Что такое куки (COOKIE) и как с ними работать в PHP


В этой статье я расскажу вам о том, что такое Cookie (в переводе с английского - печенье, к слову об изображении), как их используют, насколько они важны в современном Рунете и как с ними работать средствами PHP.

Теперь немного сухой, но обязательной информации, которая после будет объяснена на примерах)

Cookie - это набор данных (сохраняемый как текстовый файл), который создаётся web-сервером и который отсылается при каждом обращении к серверу. Cookie хранятся в браузере пользователя и составляются для определённого сайта.

Куки, как правило, используют для хранения технических данных пользователя (кэш уникального id для автоматического входа на сайт, личные настройки и статистики), интернет-ресурсу (что смотрел, что нажимал) и общим данным по предпочтениям (например любит сайты, посвящённые автомобилям, а значит ему можно показывать соответствующую рекламу на других сайтах - обращали внимание на такое? Это cookie). Куку удаляют в основном двумя способами: средствами PHP и самостоятельной чисткой пользователя кук своего браузера.

Примеры записи cookie на PHP


Первое и самое главное - запись куки в браузер. Ниже приведены примеры записи, продления, сокращения на PHP.
Для записи, продления, сокращения срока действия куки используется setcookie.

<?php
// создаём куку
  setcookie("Name", "Value",time()+3600); // создали cookie с названием Name, значением Value на 1 час (3600 секунд)

// сокращаем срок действия
  setcookie ("Name", "", time() - 3600); // срок действия куки сокращён на час
?>


Как проверить, записалось ли значение для cookie?


<?php
  setcookie("Name", "Value",time()+3600); // создаём куку
  if (SetCookie("Test","Value")) echo "<p>Cookies успешно установлены!</p>";
// при следующем запросе выведет 'Value':
  echo @$_COOKIE['Test']; // выводим куку. Напоминаю, знак @ не выводить ошибку в случае отсутствия куки
?>

В последнем примере при выводе куки мы используем специальный для этого массив $_COOKIE.

Как удалить Cookie в PHP?


Для удаления куки используется также setcookie или unset.

<?php// удаляем куку
  unset($_COOKIE["Name"]); // первый способ удалить куку
  setcookie("Name","Value",time()-1); // второй способ - возьмём и просрочим действие куки
  setCookie("Name",""); // третий способ - оставляем значение пустым
?>


Пишем первый скрипт с использованием Cookie на PHP - форма авторизации


И давайте сейчас с Вами решим такую задачу: если пользователь авторизован на сайте, то поздороваться с ним, иначе вывести форму входа. Причём, если данные, введённые в форму, неправильные, то вывести соответствующее предупреждение. Реализация выглядит следующим образом:

<?php
// вывод формы для ввода данных
// после нажатия "Войти" страница обновляется
  function showForm() {
    $string = "<form action = '".$_SERVER["SCRIPT_NAME"]."' method='post'>";
    $string .= "<label>Логин: </label>";
    $string .= "<input type = 'text' name = 'login'>";
    $string .= "";
    $string .= "<label>Пароль: </label>";
    $string .= "<input type = 'password' name = 'pass'>";
    $string .= "";
    $string .= "<input type = 'submit' name = 'log' value = 'Войти'>";
    $string .= "</form>";
    return $string;
  }
// проверка введённых пользователем данных. Если верно, то возвращает true
  function check($login, $pass) {
    if (($login == "admin") && ($pass == md5("12345"))) return true;
    else return false;
  }
// теперь запись
  if (isset($_POST['log'])) {
    $login = $_POST['login'];
    $pass = md5($_POST['pass']);
    if (check($login, $pass)) {
      setcookie("login", $login);
      setcookie("pass", $pass);
    }    
    else echo "Вы ввели неверные данные. Пожалуйста, попробуйте ещё";
  }
?>
<html>
<head>
</head>
<body>
  <?php
    setcookie("login", $login);
    setcookie("pass", $pass);
    // ниже дубль предыдущего кода, который позволяет реализовать сценарий в рамках одной страницы
    $login = $_COOKIE['login'];
    $pass = $_COOKIE['pass'];
    if (check($login, $pass)) echo "Здравствуйте, $login";
    else echo showForm();
  ?>
</body>
</html>

Смотрим результат работы. После демонстрации обязательно прочитайте описание работы кода.

Демонстрация Скачать исходники


Код и его логика простые. В верхней части мы создали функции-обработчики: вывод формы для входа, проверка соответствия данных (если успех, то возвращает true, если данные не совпадают, то - false):

В качестве логина - admin, пароля - 12345


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

Обратите внимание на $_SERVER[SCRIPT_NAME] (можно заменить на $_SERVER[REQUEST_URI]). Эта константа содержит путь к текущему файлу. В результате обработки формы (значение атрибута action) обращается по этому же пути, к этому файлу.

Следом идёт проверка отправки формы (передавались ли значение log, то есть нажимали ли кнопку Войти). Если да, то проверяются данные login и pass. Стоит обратить внимание, что пароль не передаётся в чистом виде, а зашифровывается встроенной в PHP функцией шифрования данных md5().

Пароли шифруются затем, чтобы злоумышленник не смог посмотреть куки вашего браузера и увидеть их в исходном виде. Существуют функции Java Script (что такое JS?), которые позволяют беспрепятственно посмотреть ваши куки. В зашифрованном виде они не будут представлять особого интереса.


Сравнение пароля в данном скрипте происходит по модели шифруем(пароль из формы) совпадает ли с шифруем(пароль по умолчанию). Если проверка прошла успешно, то получаем true и далее происходит запись в cookie. Если нет, то выводится сообщение - Вы ввели неверные данные. Пожалуйста, попробуйте ещё. И вновь выводим форму авторизации с HTML-тегами.

Спасибо за внимание!
 



Похожие статьи


Комментарии к статье (vk.com)