2015-08-08 80 views
0

我有一個用戶界面頁收集各種價值觀,並將它們保存到數據庫。 我在後端創建/更新腳本中將其中一些值存儲爲cookie,並且這些值在24小時後設置爲過期。php餅乾變化沒有被拿起在相同的域

的一個例子是:

if (isset($_POST["clone_on_sale"])) { 
     setcookie("mi_clone_on_sale", "Y", time() + $expiryTime); 
    } else { 
     setcookie("mi_clone_on_sale", "N", time() + $expiryTime); 
    } 

當我在UI更改此clone_on_sale值並保存它,後臺腳本總是顯示在$ _COOKIE變量的值相同,即使我檢查和它正在擊中正確的邏輯塊並將它們分別設置爲Y或N.

在它拿起這些cookie以及使用下面的代碼使用它們顯示的UI頁面:

$cookieCloneOnSale = "N"; 
if (isset($_COOKIE["mi_clone_on_sale"])) { 
$cookieCloneOnSale = $_COOKIE["mi_clone_on_sale"]; 
} 

內PHP代碼$ _COOKIES不被更新:

array (
'mi_category' => '1', 
'mi_auto_relist' => 'Y', 
'mi_clone_on_sale' => 'Y', //<<always Y 
'mi_refunds_allowed' => 'Y', 
'mi_pct_for_charity' => '20', 
'mi_price' => '12.00', 
'mi_min_price' => '12.00' 
) 

但是,當我檢查在Chrome中的域名Cookie,我可以看到這些cookie實際上每次都正確地更新。 (請注意以下clone_on_sale)

enter image description here

我不知道是否有一個步驟我錯過這裏?

回答

1

setcookie()不會立即影響$_COOKIE數組,因爲它只是爲當前請求設置包含cookie數據的標頭。他們將在您的腳本的下一個請求中被正確選中。在當前請求$_COOKIE將保持在相同的狀態。

我建議你將所有更新的數據存儲在不同的類或數組中。最簡單的解決方案將設置不同的陣列設置cookie將沿着:

$cookieData = [] 
if (isset($_POST["clone_on_sale"])) { 
    setcookie("mi_clone_on_sale", "Y", time() + $expiryTime); 
    $cookieData['mi_clone_on_sale'] = 'Y'; 
} else { 
    setcookie("mi_clone_on_sale", "N", time() + $expiryTime); 
    $cookieData['mi_clone_on_sale'] = 'N'; 
} 

或者你可以使用一個連擊的方法,創建一個類getCookiesetCookie方法。

而且,你不設置你的cookies整個域,您可以通過提供/作爲第四個參數setcookie做到這一點:

setcookie("mi_clone_on_sale", "N", time() + $expiryTime, '/'); 

如果你不設置它,你的cookie僅適用於腳本所在子目錄中的當前目錄。