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