2012-01-24 7 views
0

Я думаю, что знаю ответ (я С.О.Л.), но я думал, что поставил вопрос в любом случае, чтобы узнать, есть ли у кого-нибудь совет.Поведение cookie похоже на 1 страницу с задержкой

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

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

куки установлен, перед < головы> как это:

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

куки извлекается вниз на странице, как это:

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

Тем не менее, на странице «Чикаго» отображается установленный «cookie» Dallas, хотя новый cookie установлен в «Chicago»

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

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

Моя кишка говорит, что нет, но это такой общий вопрос, который я думал, может быть ...

Спасибо!

+3

Почему вы должны использовать кук, чтобы получить текущий город? У вас уже есть город в переменной '$ location'. – PeeHaa

+0

Как примечание, зачем хранить его в cookie? Храните его в [сеансе] (http://us3.php.net/manual/en/session.examples.basic.php) – Mikhail

ответ

0

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

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

echo 'Current City '. $location; 

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

+1

Хорошее обходное решение, спасибо. – Kevin

0

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

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

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

$location = 'Chicago'; 
setcookie("location", $cookie_loc, time()+31536000, "/"); 
$_COOKIE['location'] = $location; // not sure what $cookie_loc is 
0

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

<a href="./probably_same_php_page.php" onclick="document.cookie='location=' + this.innerHTML">Chicago</a>