2012-01-24 25 views
0

我想我知道答案(我是S.O.L),但我想我會發布這個問題,看看有沒有人有任何建議。Cookie的行爲似乎被延遲1頁

我們有一個包含城市的網站。我們正在嘗試使用Cookie來「記住」用戶訪問過的當前/最後一個城市,但我們沒有得到我們想要的行爲。該Cookie總是延遲1頁(常見的問題這裏列出:http://php.net/manual/en/function.setcookie.php

比方說,你去的網址:site.com/dallas 然後,你去的網址:site.com/chicago

一個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也可以在不刷新頁面的情況下獲得?

我的直覺說沒有,但它是這樣一個共同的問題,我想,也許......

謝謝!

+3

前將餅乾爲什麼你需要使用cookie來獲得當前的城市?你已經在變量'$ location'中擁有城市。 – PeeHaa

+0

作爲一個側面說明,爲什麼將它存儲在cookie中?將它存儲在[session](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變量沒有設置之初,那麼它就會從cookie來獲取,否則代碼將使用它。 :)

+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>