2017-01-21 2 views
-1

Обучаясь концепцию Cookies в PHP, я наткнулся на следующее заявление от w3schools PHP Tutorial:Что означает «значение файла cookie автоматически URL-код при отправке файла cookie и автоматически декодируется при его получении» означает?

Значение куки автоматически URLencoded при отправке куки, и автоматически декодируется при получении (для предотвращения URLencoding, вместо этого используйте setrawcookie())

Я не понял значения этого утверждения. У меня есть следующие сомнения в отношении вышеуказанного заявления:

  1. Откуда отправляется куки, кому и где будет получен печенье?
  2. Что на самом деле происходит с помощью «Значение файла cookie автоматически URL-адрес при отправке файла cookie и автоматически декодируется при получении»?
  3. Какую роль играет setrawcookie()? Я имею в виду, что он на самом деле делает?

Ниже приводится код, который я пытался для понимания концепции печенья:

<?php 
    $cookie_name = "user"; 
    $cookie_value = "John Doe"; 
    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 

<?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]; 
    } 

ли кто-то пожалуйста, очистить мои запросы со ссылкой на приведенный выше код?

ответ

1

Http-файлы cookie - это заголовки, которые передаются между клиентом (браузером) и веб-сервером.

При использовании setcookie, что вы делаете инструктирует интерпретатор PHP, чтобы ввести заголовок в ответ с этим форматом:

Set-Cookie:name=value 

Это печенье будет храниться в браузере, и возвращает его в будущие запросы (в том же хост) в заголовке запроса Cookies, как это:

Cookie:name=value;cookie2=value;cookie3=value 

Обычно при передаче этого вы должны UrlEncode специальных символов. Допустим, что я тусклый, чтобы указать печенье под названием «оператор» со значением «>», то я должен излучать этот заголовок:

Set-Cookie:operator=%3E 

Когда он говорит, что значение автоматически urlencoded, говорит, что вы не Не стоит беспокоиться об этом. Вы можете просто:

setcookie('operator', ">"); 

И PHP будет обрабатывать urlencoding напрямую, создавая правильный заголовок.

На стороне сервера, вы будете получать печенье в $_COOKIES суперглобальной, и таким же образом, что происходит с $_GET и $_POST, значения будут автоматически urldecoded для вас. Поэтому, если клиент возвращает ранее установленный файл cookie %3E, вы увидите: > в своем коде.

Если вы используете своего инспектора браузера, вы можете увидеть соответствующие заголовки для любого запроса-ответа. Например:

запрос (возвращение печенье)

request sending cookie

ответа (установка печенье)

response returning cookie

setrawcookie, делает то же самое, но вы должны UrlEncode на твой собственный. Из документов:

setrawcookie() точно такой же, как setcookie(), за исключением того, что значение cookie не будет автоматически присвоено по URL-адресу при отправке в браузер.

Скорее всего, у вас не будет причин когда-либо использовать setrawcookie.

+0

Но могут ли эти URLencode и URLdecode вступать в игру всегда или только тогда, когда значение cookie содержит в себе какой-либо специальный символ? – user2839497

+0

... если символов нет, чем требуется urlencoding или urldecoding, это не имеет значения. Вы можете запустить 'urlencode ('abc');' ad infinitum, и вы всегда получите '' abc''. – yivi

1

От кого печенье отправляется кому и где будет получено от него печенье?

Первоначально cookie будет отправлен с сервера в браузер. В каждом последующем запросе браузер отправляет его обратно на сервер.

Что на самом деле происходит с помощью «Значение файла cookie автоматически URL-код при отправке файла cookie и автоматически декодируется при его получении»?

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

Вам не нужно это делать самостоятельно, потому что метод PHP setcookie сделает это за вас, а переменная $_COOKIE будет содержать декодированные версии к моменту взаимодействия вашего кода с ним.

Какую роль играет setrawcookie()? Я имею в виду, что он на самом деле делает?

Он позволяет вам устанавливать cookie без этой кодировки (поэтому вам нужно его закодировать вручную). Вам, вероятно, никогда не понадобится его использовать.

Смежные вопросы