2015-04-24 3 views
1

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

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

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

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

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

ответ

1

Печеньки хранятся как параметры GET.

Для Exemple:

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

Будут сохранены как:

a=A&b=B 

Я полагаю, что, если ключ пустой, url_encode покажет это:

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

A&b=B 

Wich может быть следующим:

A = ""; 
b = "B"; 
+0

Добавление '? A & B' в скрипт будет хранить ключи в GET, такие как' $ _GET ['A'] 'и' $ _GET ['B'] 'с пустыми строками, что я как бы понимаю, это будет так же, как наличие setcookie ('A'); ', но почему это работает так, как с пустой строкой для имени, которое мне интересно – Arno

0

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

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