В этой статье я расскажу вам о том, что такое 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-тегами.
Спасибо за внимание!