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
как первый.