Поведение куки, похоже, задерживается на 1 страницу - PullRequest
0 голосов
/ 24 января 2012

Мне кажется, я знаю ответ (я СОЛ), но я все равно решил опубликовать вопрос, чтобы узнать, есть ли у кого-нибудь совет.

У нас есть веб-сайт с городами.Мы пытаемся использовать куки-файлы, чтобы «запомнить» текущий / последний город, который посетил пользователь, но мы не получаем желаемого поведения.Файл cookie всегда задерживается на 1 страницу (здесь перечислены общие ловушки: http://php.net/manual/en/function.setcookie.php)

Допустим, вы переходите по URL-адресу: site.com/dallas. Затем вы переходите по URL-адресу: site.com/chicago*1006.*

Файл cookie устанавливается перед следующим образом:

$location = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 

Файл cookie загружается вниз на странице следующим образом:

<?php
if(isset($_COOKIE["location"])) {
  echo 'Current City '.$_COOKIE["location"] ;
} else {
  echo 'Current City: none';
}
?>

Однако наНа странице «Чикаго» отображаются установленные файлы cookie «Далласа», хотя для нового файла cookie установлено значение «Чикаго» * ​​1014 *

Очевидно, что файл cookie удаляется до того, как он был сброшен.

Есть ли известный способ исправить это так, чтобы файл cookie, установленный при переходе на страницу, также можно было получить без обновления страницы?

У меня интуиция говорит "нет", но это такая распространенная проблема, я подумал, что, возможно,...

Спасибо!

Ответы [ 4 ]

0 голосов
/ 30 мая 2013

В вашем случае вы также можете использовать некоторый код JavaScript, чтобы установить cookie перед загрузкой страницы

<a href="./probably_same_php_page.php" onclick="document.cookie='location=' + this.innerHTML">Chicago</a>
0 голосов
/ 24 января 2012

Почему бы вам не установить переменную $_COOKIE всякий раз, когда вы вызываете setcookie?

$location = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 
$_COOKIE['location'] = $location; // not sure what $cookie_loc is
0 голосов
/ 24 января 2012

Если вы установите файл cookie на странице, он явно не будет доступен на этой странице.Но если вы установите местоположение на этой странице, вы можете извлечь его из этой переменной!

if (!isset($location) && isset($_COOKIE["location"]))
{
    $location = $_COOKIE["location"];
}

echo 'Current City '. $location;

Если переменная $location не установлена ​​в начале, то она будет получена из файлов cookie, в противном случаекод использует это.:)

0 голосов
/ 24 января 2012

Вы можете просто установить его в суперглобальном:

$cookie_loc = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 
$_COOKIE['location'] = $cookie_loc;
...