ВСЕ СТАТЬИ
Блог начинающего программиста
Регистрация

Куки cookies

Опубликовано:

Переводится как печеньки

Небольшие текстовые файлы, которые находятся на жестком диске компьютера пользователя Интернета в каталоге браузера. В них браузер записывает данные, полученные от посещенных сайтов в виде пары "имя=значение". Поэтому эти сайты помнят тех, кто их посетил. Когда пользователь дает браузеру команду открыть веб-страницу, браузер отправляет эти данные серверу. Данные может изменить сервер. При запуске сценария на сервере, сценарий получает cookies. Каждому браузеру принадлежат свои куки. Cookies одного браузера недоступны другому. Скрипт получает куки из переменной окружения HTTP_COOKIE.

В веб-обозреватель cookie устанавливает сервер в заголовке ответа в следующем виде:

Set-Cookie: name=value; expires=data; domain=имя_хоста; path=путь; secure

Как установить в браузере куки

В Хроме при попытке использования отключенных функций кукис, в правом конце адресной строки появляется значок. Если навести мышь на этот значок, всплывает окно с предупреждением "Попытка сохранить файл cookie заблокирована". Если кликнуть по значку, то выскочит окно, как на рисунке 1.

Управление включением кукис в Хроме
Рис. 1. Разрешить, или блокировать работу кукис.

В параметрах, настройках браузера (у разных браузеров этот сервис устроен по-разному) требуется разрешить или запретить использование кукис.

Использование браузера в режиме инкогнито позволяет устанавливать куки только сессионно т.е. на время работы в браузере. После окончания работы браузер следует закрыть.

Опасность куки

Наличие файлов кукис на вашей машине позволяет манипулировать вашим сознанием. Это может делать как государство так и субъект.

Также злоумышленник, получивший доступ на ваш компьютер и нашедший куки, может управлять вашими доступами.

Задание:

Создать на странице 3 ссылки: "Крупный шрифт", "Средний шрифт", "Маленький шрифт". В зависимости от того, по какой ссылке пойдет пользователь, установить размер шрифта, он должен сохраняться и при переходе на другие страницы сайта. 

Решение:

Функция setcookie посылает cookie клиенту (пользователю Интернетом) вместе с другими HTTP заголовками.

Файл cook.php:


<?php
$size = $_GET['size'];
setcookie("size", $size);
$size = (isset ($_COOKIE['size'])) ? $_COOKIE['size'] : $_GET['size'];
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Style</title>
        <style type="text/css">
            body {
                font-size: <?=$size?>%;
            }
        </style>

    </head>
    <body>
        <a href="cook.php?size=200">Крупный шрифт</a>
        <br>
        <a href="cook.php?size=100">Средний шрифт</a>
        <br>
        <a href="cook.php?size=50">Мелкий шрифт</a>
        <p>
            Lorem ipsum ljlj dolor fmtn, amet consectetur adihisicing elit.
        </p>
    </body>
</html>

Установленные в браузер куки действуют не сразу. Для их работы требуется загрузка следующей страницы сайта через массив $_COOKIE. Поэтому для проверки работы этого скрипта требуется перезагрузка страницы.

Проверить работу скрипта Style в новом окне.

Дополнено 27.09.2017

Авторизация с помощью куки и сессии

Подтверждение прав пользователя на запрашиваемый ресурс или действие. Происходит в виде обмена заголовками между клиентом и сервером.

Задание урока 8 из книги Д. Ляпина А. Никитина "PHP - это просто".

Создать на сайте главную страницу index.php. Эта страница отправляет неавторизованных пользователей на страницу авторизации. Авторизованные попадают на страницу, которую они посетили в последний раз ("А" или "Б"). Пользователь главную страницу index.php не должен видеть. Она - для перенаправления.

Решение.

Для решения задачи используем куки и сессии. Сайт будет состоять из 4-х страниц:

  • Страница авторизации login.php
  • Главная страница index.php
  • Страница a.php
  • Страница b.php

Страницы a.php и b.php посетить могут только авторизованные посетители. Главная страница index.php никому не видна.

$username - имя пользователя.

$remember - булева переменная. Указывает на выбор посетителя автоматически авторизоваться.

Код страницы login.php, на которую попадают неавторизованные посетители:


<?php
//Сброс авторизации
session_start();
setcookie('username', '', time() - 1);
setcookie('url', '', time() - 1);
unset($_SESSION['username']);
unset($_SESSION['url']);
?>
<html>
<head>
    <title>Вход на сайт</title>
</head>
<body>
    <h1>Вход на сайт</h1>
    <form action="index.рhр" method="post">
        Введите имя:
        <br>
        <input type="text" name="username">
        <br>
        <input type="checkbox" name="remember"> Запомнить меня
        <br>
        <input type="submit" value="Войти">
    </form>
</body>
</html>

Страница a.рhр для авторизованных пользователей. Если в сессии нет имени пользователя, ищем его в cookies и если находим, то записываем в сессию:


<?php
//Точка входа
session_start();
if (!isset($_SESSION['username']) && isset($_COOKIE['username']))
    $_SESSION['username'] = ($_COOKIE['username']);
$username = $_SESSION['username'];
//Записываем в куки адрес этой страницы
setcookie('url', 'a.рhр');
if ($username == null)
{
    header("Location: login.рhр");
    exit;
}
?>
<html>
<head>
    <title>Страница А</title>
</head>
<body>

    <h1>Страница "А"</h1>
    <b>A</b> и <a href="b.рhр">Б</a> сидели на трубе.
    <br>
    <br>
    Вы вошли как <b><?рhр echo $username; ?></b> | <a href="login.рhр">Выход</a>
</body>
</html>

Страница b.рhр для авторизованных пользователей. Почти не отличается от a.рhр:


<?php
//Точка входа
session_start();
if (!isset($_SESSION['username']) && isset($_COOKIE['username']))
    $_SESSION['username'] = ($_COOKIE['username']);
$username = $_SESSION['username'];

//Записываем в куки адрес этой страницы
setcookie('url', 'b.рhр');
if ($username == null)

{
    header("Location: login.рhр");
    exit;
}
?>
<html>
<head>
    <title>Страница Б</title>
</head>
<body>

<h1>Страница "Б"</h1>
<a href="a.рhр">А</a> и <b>Б</b> сидели на трубе.
<br>
<br>
Вы вошли как <b><?рhр echo $username; ?></b> | <a href="login.рhр">Выход</a>
</body>
</html>

Главная страница нашего сайта - index.рhр. Она управляет работой сайта и никому не видна:


<?php
session_start();
//Авторизация
function Login ($username, $remember)
{
    if ($username == '') return false;
    $_SESSION['username'] = $username;// Запоминаем имя в сессии
    $_SESSION['url'] = $remember;
    if ($remember)
    {
        setcookie('username', $username, time() + 3600 * 24 * 7);// Запоминаем имя в куки
    }
    return true;
}

//Точка входа
//Если пользователь авторизован с запоминанием,
// отправляем на последнюю посещенную им страницу

if ($_SESSION['username'] && $_SESSION['url'])
{
    header("Location: " . $_COOKIE['url']);
    exit;
}
//Если пользователь не авторизован,
//а производит авторизацию с запоминанием- на страницу a.рhр
elseif (count($_POST) > 1 && $_POST['remember'])
{
    Login($_POST['username'], $_POST['remember'] == 'on');
    header("Location: a.php");
    exit;
}
//Если пользователь не авторизован,
//а авторизуется без запоминания - отправляем на страницу b.рhр
elseif (count($_POST) > 0 && $_POST['remember'] == null)
{
    Login($_POST['username'], $remember = false);
    header("Location: b.рhр");
    exit;
}
else
{
    header("Location: login.рhр");
    exit;
}
?>

Проверить работу сайта с входом на сайт в новом окне.


Комментарии

Пока комментарий нет

Оставить свой комментарий:

Зарегистрироваться
Имя:
Электронная почта:
Текст комментария:
Введите код с картинки:
картинка