Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rusldv
8 лет назад

PHP - Урок 10. COOKIE.



Кот программист из Интернета - Источник кота



Предыдущие уроки:



Программируем на PHP - Введение

PHP - Запросы от браузера к серверу

PHP - Как работает сервер

PHP - Урок 4. PHP - интерпретатор

PHP - Урок 5. Переменные сервера и глобальные переменные

PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк

PHP - Урок 7. Переменные, константы и условия

PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess

PHP - Урок 9. Массивы и switch. Кодим основной каркас


Сегодня как и обещал выясним как на стороне сервера (на сайте) запоминается пользовательский браузер. Именно браузер, а не сам пользователь. Подобно тому, как если вы заходите в соцсеть, и до этого недавно залогинились - вам не потребуется заново вводить свои логин и пароль. Их запомнил браузер и отправляет их серверу автоматически при заходе на сайт. Запоминает их он путем добавления в специальном своем файле строк в каждой которых помимо данных сайта и другой информации хранится пары имя (чаще называют ключом) и значение. Если в браузере для данного сайта есть куки - то при посещении сайта с этого браузера они будут отправлены на сервер в заголовках запроса.

Как посмотреть наличие кук для сайта и почистить их


Вчера кто заходил на голос со своего постоянного браузера вылезала ошибка 502. Чтобы эту ошибку одолеть надо было всего лишь почистить куки.
Причем достаточно только для сайта golos.io, а не для всех посещаемых сайтов. Мы программисты делать должны это так

Открыть консоль разработчика (F12) - Вкладка ресурсы - пункт дерева ресурсов cookie. Тут на куки можно посмотреть. И если вызвать контекстное меню для пункта куки и выбрать clear (очистить) - то все куки для данного сайта удаляться. Что вчера нам и нужно было сделать.

Итак куки передаются серверу при запросе ресурса автоматически от браузера, если они есть. Однако как эти куки записать в браузер из нашего php-скрипта.

Как мы обсуждали ранее - заголовки передаются в том числе и с сервера клиенту. Легко догадаться, что если такие заголовки получает браузер, то он понимает, что их нужно сохранить в свой файл кук для данного сайта.
Для этого существует функция setcookie(). Эта функция создает заголовок, который отправляется браузеру для сохранения кука.
А вот чтобы читать заголовки приходящие от браузера серверу существует глобальный массив $_COOKIE['ИмяКука']. Как вы наверное заметили по принципу работы он аналогичен $_GET и $_POST.

Простой пример

Откроем файл test.php в папке нашего сайта (thesite.loc/www) и отредактируем его так:

<?php
    $name = 'Руслан';
    $num = 48;
    //echo "Привет, $name, ты живешь в квартире номер $num! \n Мы Anonimous - жди нас.";
    print_r($_COOKIE);

Если у браузера будут куки для нашего сайта он их передаст вместе с запросом и соответственно они появятся в этом массиве. В результате будут отображены на экране функцией print_r().
Однако кук там нет. Поэтому нужно предварительно их отправить.
Добавим в начало файла (до любого вывода echo, print_r и т.п) следующий код.

<?php
    $name = 'Руслан';
    $num = 48;
    setcookie ("user_name", $name, time()+3600);
    setcookie ("user_id", $num, time()+3600);
    //echo "Привет, $name, ты живешь в квартире номер $num! \n Мы Anonimous - жди нас.";
    print_r($_COOKIE);

Первый параметр функции setcookie - это ключ. Второй - значение. А третий - время сколько будет хранится кука. В примере 1 час. Однако я выбираю в реальных проектах период не меньше месяца.

Как мы уже знаем заголовки отправляются до любого вывода (на то они и заголовки), если вы функцию создающую заголовки добавите после вывода контента страницы - это уже не заголовок. И соответственно куки не сохранятся. А php выведет предупреждение на экран или в логи в зависимости от настроек.
Написав данный код в нашем файле test.php мы его сохраним и обновим.
На первый раз массив $_COOKIE ничего не выдаст. Так как в первый раз куки только записались в браузер.
А вот когда мы обновим страницу второй и последующие разы. Куки в заголовках вместе с запросом будут отправляться серверу. И мы увидим их распечатку в массиве.

Array ( [user_name] => Руслан [user_id] => 48 )

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


В следующем уроке мы познакомимся с функциями PHP на примере нашего проекта. И создадим специальный файл core.php.
89
126.097 GOLOS
На Golos с November 2016
Комментарии (3)
Сортировать по:
Сначала старые