Cookie - это набор данных, который создаётся Web-сервером и который отсылается при каждом обращении к серверу. 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 приходится очень часто, и я постараюсь в следующих статьях закрепить Ваши знания о них.
