Что именно происходит с помощью средства или кодирования URL-адреса и декодирования URL-адреса при работе с файлами cookie в PHP?

Я изучаю понятие Cookies в PHP по этой ссылке

До сих пор я понял, что

Файл cookie часто используется для идентификации пользователя. Файл cookie - это небольшой файл, который сервер встраивает на компьютер пользователя. Каждый раз, когда один и тот же компьютер запрашивает страницу в браузере, он также отправляет cookie. С помощью PHP вы можете как создавать, так и извлекать значения cookie.

Я изучил следующую демонстрационную программу, представленную по указанному выше адресу:

<!DOCTYPE html>
<?php
  $cookie_name = "user";
  $cookie_value = "John Doe";
  setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<html>
  <body>

  <?php
    if(!isset($_COOKIE[$cookie_name])) {
      echo "Cookie named '" . $cookie_name . "' is not set!";
    } else {
      echo "Cookie '" . $cookie_name . "' is set!<br>";
      echo "Value is: " . $_COOKIE[$cookie_name];
    }
  ?>

  <p><strong>Note:</strong> You might have to reload the page to see the value of the cookie.</p>

  </body>
</html>

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

  1. Поскольку cookie - это не что иное, как файл, который сервер встраивает в компьютер пользователя, тогда где находится код создания файла и манипулирования им? Без манипуляции файлами и кода загрузки файлов, как сервер внедряет файл на компьютер пользователя или как браузер отправляет запрос на сервер вместе с файлом cookie?
  2. Хотя, если я считаю, что файл cookie был внедрен сервером на компьютер пользователя, то где находится файл на моем компьютере, работающий под управлением Windows 10 Home Edition?

Я также прочитал одно утверждение, как показано ниже:

Примечание. Значение файла cookie автоматически кодируется URL-адресом при отправке файла cookie и автоматически декодируется при получении (для предотвращения кодирования URL-адреса используйте вместо него функцию setrawcookie()).

Позвольте мне откровенно сказать вам, что я совсем не понял, что означает это предложение и что именно происходит при отправке и получении файлов cookie. Я также не знаю, что такое кодирование и декодирование URL в PHP?

Было бы лучше, если бы кто-то снял все мои сомнения с хорошим объяснительным ответом и примером рабочего кода.

Позвольте мне честно сказать вам, что, как я слышал от опытных разработчиков PHP, Cookies и Session являются наиболее важными, основными понятиями в PHP. Но я нахожу их трудными для понимания. Поэтому, пожалуйста, объясните мне простым и ясным языком, что я мог бы понять эти концепции лучше и проще.

Короче говоря, я хочу понять концепцию, функционирование и использование файлов cookie в PHP на примере рабочего кода.

Благодарю вас.

2 ответа

Хранение и транспортировка куки

Учебное пособие является неправильным или, по крайней мере, немного запутанным. Традиционно файлы cookie сохранялись в виде отдельных файлов, но это всего лишь подробности реализации, и клиент, браузер полностью определяет, как файлы cookie хранятся, если вообще.

URL-кодировка и -decoding - это способ кодирования специальных символов, которые не совместимы с URL-адресами в другой последовательности, например, пробел конвертируется в%20. Это происходит для того, чтобы убедиться, что куки хорошо достигают другой стороны и могут храниться правильно, но, как и фраза о файлах, они не имеют отношения к использованию куки.

Так для чего это нужно?

Смысл куки в том, что это часть информации, которая отправляется туда и обратно. Когда вы звоните setcookie та информация ($cookie_value) отправляется с другим контентом обратно клиенту (скажем, браузеру), который сделал запрос. Клиент может хранить эту информацию, и когда он делает другой запрос на тот же сервер, он отправит значение cookie вместе с запросом.

Это позволяет серверу снова использовать это значение и признать, что это тот же клиент, который сделал запрос.

Как правило, файлы cookie используются для сеансов, в которых вы можете войти, и сайт запомнит, кто вы. В простейшей форме (НО НЕ ДЕЛАЙТЕ ЭТОГО) значение cookie может содержать информацию для входа в систему, поэтому при каждом запросе вы можете убедиться, что это снова тот же пользователь. Отправлять такую ​​информацию немного небезопасно, потому что информация легко читается из файла и из сетевого трафика, поэтому велика вероятность того, что вы потеряете личную информацию. Более того, это не позволит вам различать разные сеансы (когда Вы входите в систему на двух разных компьютерах или в двух разных браузерах).

Лучший и более распространенный сценарий - это когда пользовательская информация запоминается на сервере, например, с помощью $_SESSION переменная. Вместо того, чтобы помещать все учетные данные в файл cookie, создается уникальный идентификатор, связанный с информацией о сеансе. Этот идентификатор сеанса хранится в файле cookie.

Итак, чтобы использовать куки,

  • Вам нужно знать, как установить cookie и как его прочитать.
  • Вы хотели бы знать, что он хранится в браузере и отправляется туда и обратно с запросами и ответами. (И как проверить и сбросить его значение в браузере, чтобы вам было проще проверять и отлаживать ваш код).
  • Возможно, вас не очень заботит, как кодируется файл cookie и как и где он хранится на диске. Это детали реализации, которые не имеют значения для общего использования.

И чтобы проводить сеансы, вам не нужно самим устанавливать куки!

Поскольку потребность в сессиях очень распространена, PHP имеет полную реализацию для хранения информации о сессиях и отправки куки, чтобы запомнить посетителя. Вам даже не нужно звонить setcookie сам!

Лучше всего начать с чтения session_start() и связанные с ним функции. В основном, если вы позвоните session_start() в начале вашего сценария, вы можете просто манипулировать $_SESSION переменная, и все значения в ней будут храниться в запросе. Все это использование куки, а также хранение информации о сеансе на сервере полностью скрыто этим маленьким кусочком PHP-магии.

Браузеры используют файлы cookie для хранения информации, да, это файлы, но они не загружаются и не загружаются с / на сервер. Процесс примерно такой:

  • Браузер подключается к серверу и отправляет некоторые данные, включая заголовки, для идентификации запроса (получить, опубликовать и т. Д.) И отправляет файлы cookie, если таковые имеются.
  • Сервер получает эти заголовки и отправляет свои собственные заголовки, чтобы дать указание браузеру перенаправить на другую страницу, создать файлы cookie или просто указать тип содержимого, которое будет отправлено следующим.
  • Наконец, браузер получает содержимое, отправленное сервером, и анализирует его для отображения страницы, загрузки файла или перенаправления на другой URL-адрес.

    1. Браузер - это тот, кто пишет куки.
    2. Как сказал @rtfm, расположение файлов cookie зависит от браузера и SO.
Другие вопросы по тегам