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

Куки

Опубликовано: 2017-08-01
Небольшие файлы, которые находятся в компьютере пользователя Интернета. В них браузер записывает данные, полученные от посещенных сайтов. Поэтому эти сайты помнят тех, кто их посетил.
Задание:
Создать на странице 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 хостинг ХостиЯ