Cookie без имени в PHP?

Я пытался установить имя файла cookie из переменной и случайно удалил объявление переменной, что привело к интересному открытию. Рассмотрим код ниже:

setcookie('', 'value', time()+10);  

Я предположил, что этот код не должен работать, так как мы должны объявить имя для cookie, и, соответственно, вывести ошибку, но вместо этого он устанавливает cookie с именем, которое содержится в значении, и значение cookie равно в пустую строку '' вместо:

var_dump($_COOKIE);  // array (size=1) 'value' => string '' (length=0)
setcookie('', 'value', time()+10);  
echo (int)isset($_COOKIE['value']);  // 1

Может кто-нибудь объяснить, пожалуйста, почему это происходит? Я просто пытаюсь думать, что потенциально может быть ситуация, когда это может произойти и вызвать много путаницы, хотя вы должны проверять все на наличие ошибок в своем коде.

2 ответа

Куки хранятся как параметры GET.

Например:

setCookie('a', 'A');
setCookie('b', 'B');

Будет храниться как:

a=A&b=B

Я предполагаю, что, если ключ пуст, url_encode будет отображать это:

setCookie('', 'A');
setCookie('b', 'B');

A&b=B

Который можно прочитать как:

A = "";
b = "B";

Просто предположение: глядя на источник setcookie, формат, используемый для Set-Cookie строка заголовка Set-Cookie: %s=%s, Итак, я не программист C, но, возможно, C snprintf не заменяет первый параметр name (которая будет пустой строкой) и начинает замену строки формата вторым дополнительным параметром value как первый.

Другие вопросы по тегам