Почему я не могу изменить значения в своих файлах 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 не меняются? Есть ли способ исправить это или рекомендуемый обходной путь?
2 answers
Хорошо, я думаю, нашел проблему. Первый файл cookie устанавливается с домашней страницы. Второй был установлен с другой страницы.
Я заглянул в диалоговое окно Chrome "файлы cookie" и обнаружил, что у меня есть несколько файлов cookie, настроенных с разными путями.
setcookie()
имеет аргумент "$path
":
Путь на сервере, на котором будет доступен файл cookie. Если установлено значение "/", файл cookie будет доступен во всем домене. Если установлено значение '/foo/', файл cookie будет только доступно в каталоге /foo/ и во всех подкаталогах, таких как /foo/bar/ домена. Значением по умолчанию является текущий каталог, в котором устанавливается файл cookie.
Итак, в моем setcookie()
я теперь делаю:
setcookie('region[state]', $state, 0, '/');
...и путь каждый раз сохраняется в "/", и я не получаю повторяющиеся файлы cookie, вызывающие путаницу.
$c = 'New York';
setcookie('city[cityname]', $c, 0);
Попробуйте сделать это, значение сохраняется через setcookie(), а не путем установки переменной.