ВСЕ СТАТЬИ
Блог начинающего программиста
Кнопка войти через Яндекс
Регистрация
Создание крупного проекта на Java с Нуля

Создание крупного проекта на Java с нуля

Посмотри, как с нуля создаётся сложный проект на Java

Получить видеоуроки

Куки

Опубликовано: 2017-08-01

Небольшие текстовые файлы, которые находятся на жестком диске компьютера пользователя Интернета в каталоге браузера. В них браузер записывает данные, полученные от посещенных сайтов в виде пары "имя=значение". Поэтому эти сайты помнят тех, кто их посетил. Когда пользователь дает браузеру открыть страницу сайта, браузер отправляет эти данные серверу. Данные может изменить сервер. При запуске сценария на сервере, сценарий получает 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. Поэтому для проверки работы этого скрипта требуется перезагрузка страницы.

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

Дополнено 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.php" method="post">
        Введите имя:
        <br>
        <input type="text" name="username">
        <br>
        <input type="checkbox" name="remember"> Запомнить меня
        <br>
        <input type="submit" value="Войти">
    </form>
</body>
</html>

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


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

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


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

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


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

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


Кипящий чайник с выхлопом клубов пара из носика

Интенсив «Основы программирования»

Бесплатный курс по программированию

Начать обучение

Бесплатный курс по основам PHP

Бесплатный Видеокурс по PHP!

Пример создания PHP-сайта!

Подробнее

Комментарии

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

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

Кнопка войти через Яндекс Зарегистрироваться

Имя:
Электронная почта:
Текст комментария:
Введите код с картинки:
картинка
PHP хостинг ХостиЯ