Почему я не могу изменить значения в своих файлах cookie? [закрыто]


Я сохраняю свой город пользователей в файле cookie.

Я я хочу, чтобы срок действия этого файла cookie истекал в сеансе браузера, поэтому я не хочу хранить эту информацию в $_SESSION, потому что я хочу, чтобы $_SESSION сохранялся в течение 23 дней по умолчанию.

Поэтому я хотел бы придерживаться того, чтобы Drupal хранил все свои материалы в $_SESSION как обычно, но также установил файл cookie с пользовательским сроком службы. Когда пользователь выбирает город, я устанавливаю файл cookie в своих формах _form_submit() крючок:

$c = 'Washington'; // ...or whatever
$_COOKIE['city']['cityname'] = $c;
setcookie('city[cityname]', $_COOKIE['city']['cityname'], 0);

Если я распечатаю это с помощью print_r($_COOKIE['city']), я получу:

Array ( [cityname] => Washington [state] => 65 )

Ура, это работает!

Затем пользователь выбирает новый город, и тот же код запускается снова (я знаю, что он работает, потому что я пытался вставить туда die;):

$c = 'New York';
$_COOKIE['city']['cityname'] = $c;
setcookie('city[cityname]', $_COOKIE['city']['cityname'], 0);

Я снова распечатываю значение $COOKIE и получаю:

Array ( [cityname] => Washington [state] => 65 )

Таким образом, значение не изменилось, и я остался с предыдущим городом. Почему значения моих файлов cookie не меняются? Есть ли способ исправить это или рекомендуемый обходной путь?

 1
Author: kiamlaluno, 2011-07-28

2 answers

Хорошо, я думаю, нашел проблему. Первый файл cookie устанавливается с домашней страницы. Второй был установлен с другой страницы.

Я заглянул в диалоговое окно Chrome "файлы cookie" и обнаружил, что у меня есть несколько файлов cookie, настроенных с разными путями.

setcookie() имеет аргумент "$path":

Путь на сервере, на котором будет доступен файл cookie. Если установлено значение "/", файл cookie будет доступен во всем домене. Если установлено значение '/foo/', файл cookie будет только доступно в каталоге /foo/ и во всех подкаталогах, таких как /foo/bar/ домена. Значением по умолчанию является текущий каталог, в котором устанавливается файл cookie.

Итак, в моем setcookie() я теперь делаю:

setcookie('region[state]', $state, 0, '/');

...и путь каждый раз сохраняется в "/", и я не получаю повторяющиеся файлы cookie, вызывающие путаницу.

 2
Author: George, 2011-07-29 00:59:28
$c = 'New York';
setcookie('city[cityname]', $c, 0);

Попробуйте сделать это, значение сохраняется через setcookie(), а не путем установки переменной.

 1
Author: Eelke, 2011-07-28 09:57:05