Добавить в корзинуПозвонить
Найти в Дзене
WebTechnology

Работа с cookie в PHP

Cookie - это набор данных, который создаётся Web-сервером и который отсылается при каждом обращении к серверу. Cookie хранятся в браузере пользователя. Как правило, cookie используется для: сохранения различных настроек, уникальных для пользователя, аутентификации пользователя, различной статистики и других подобных вещей. И о работе с cookie в PHP мы и поговорим в этой статье. Начнём с простейших вещей: с записи cookie в браузер пользователя. Для этого существует функция setcookie(): <?php
  setcookie("Name", "Value");
?> После запуска скрипта, Вы сможете посмотреть cookie. Посмотреть их можно следующим образом: либо поискать в настройках браузера, либо поискать прямо на жёстком диске, где хранятся cookie Вашего браузера, либо (самый простой способ) ввести в адресной строке: "javascript:document.cookie". Только вводите в той же вкладке, в которой Вы запускали скрипт, потому что браузеры отделяют cookie одного сайта от другого. Теперь встаёт вопрос: "Как вывести cookie?". Выводятся он

Cookie - это набор данных, который создаётся Web-сервером и который отсылается при каждом обращении к серверу. Cookie хранятся в браузере пользователя. Как правило, cookie используется для: сохранения различных настроек, уникальных для пользователя, аутентификации пользователя, различной статистики и других подобных вещей. И о работе с cookie в PHP мы и поговорим в этой статье.

Начнём с простейших вещей: с записи cookie в браузер пользователя. Для этого существует функция setcookie():

<?php
  setcookie("Name", "Value");
?>

После запуска скрипта, Вы сможете посмотреть cookie. Посмотреть их можно следующим образом: либо поискать в настройках браузера, либо поискать прямо на жёстком диске, где хранятся cookie Вашего браузера, либо (самый простой способ) ввести в адресной строке: "javascript:document.cookie". Только вводите в той же вкладке, в которой Вы запускали скрипт, потому что браузеры отделяют cookie одного сайта от другого.

Теперь встаёт вопрос: "Как вывести cookie?". Выводятся они с помощью массива $_COOKIE:

<?php
  echo $_COOKIE["Name"];
?>

В результате, Вы увидите "Value". Как видите всё элементарно.

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

<?php
function showForm() {
    $string = "<form action = '".$_SERVER["SCRIPT_NAME"]."' method='post'>";
    $string .= "<label>Логин: </label>";
    $string .= "<input type = 'text' name = 'login'>";
    $string .= "<br />";
    $string .= "<label>Пароль: </label>";
    $string .= "<input type = 'password' name = 'pass'>";
    $string .= "<br />";
    $string .= "<input type = 'submit' name = 'log' value = 'Войти'>";
    $string .= "</form>";
return $string;
}
function check($login, $pass) {
if (($login == "Admin") && ($pass == md5("123456"))) 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
    $login = $_COOKIE['login'];
    $pass = $_COOKIE['pass'];
if (check($login, $pass)) echo "Здравствуйте, $login";
else echo showForm();
?>
</body>
</html>

Код достаточно прозрачный, однако, данную статью могут читать и новички, поэтому давайте этот код разберём более подробно. Вначале мы пишем две функции: одна для вывода формы входа, а вторая функция возвращает true, если данные корректны (то есть, если логин - "Admin", а пароль - "123456"), иначе возвращает false. Обратите внимание на $_SERVER["SCRIPT_NAME"]. Данная константа содержит путь к текущему файлу. То есть мы хотим, чтобы обработчик формы (значение атрибута action) был этот же файл.

Далее мы проверяем: была ли отправлена форма (существует ли переданное значение "log"). Если существует, значит, форма была отправлена и начинаем проверять полученные данные. Обратите внимание, что пароль мы пропускаем через функцию md5(), чтобы не хранить пароль в cookie в открытом виде. Используя функцию check() мы проверяем: верны ли данные. Если данные верны, то записываем их в cookie, иначе выводим строку: "Неверные данные".

Далее мы начинаем выводить HTML-теги. Обратите внимание, что мы не можем использовать функцию setcookie() после того, как вывели что-то в браузер. То есть нельзя, например, вывести HTML-теги, а потом воспользоваться функцией setcookie(), иначе возникнет ошибка. И, поверьте, её очень многие новички допускают.

После вывода HTML-тегов мы приходим к моменту, когда надо проверять cookie. Мы считываем их, а затем проверяем. Если они верные, то здороваемся с пользователем, иначе выводим форму входа.

Вот и весь скрипт, как видите, разобраться можно. Однако, он имеет один изъян, связанный с тем, что мы выводим "Неверные данные" до тега "<html>". Поэтому домашнее задание: исправить эту ошибку, чтобы не было нарушения валидности HTML-кода. Сделать это очень просто, однако, будет крайне полезно, так как Вам придётся разобраться в этом коде, а, следовательно, разобраться с тем, как работать с cookie в PHP. А использовать cookie в PHP приходится очень часто, и я постараюсь в следующих статьях закрепить Ваши знания о них.