2013-03-10 96 views
1

只有在cookie未設置且剛剛設置的情況下,我才需要運行查詢。 (換句話說,這是用戶第一次訪問頁面)測試cookie是否已設置,php

我試過如下:

$cookiename = "item_".$itemid; 

if(!isset($_COOKIE[$cookiename])){ 
    setcookie($cookiename, "viewed", time()+60*60*18); 
    $was_set="no"; 
} 

//if it wasn't set and now it is 
if(isset($_COOKIE[$cookiename]) and $was_set=="no") { 
    mysql_query("UPDATE items_details SET views=views+1 where iid=$itemid"); 
    echo "<!-- +1 view -->"; 
} 
else { 
    echo "<!-- +0 views -->"; 
} 

第一部分運作良好,設置cookie,如果它不是,但第二部分不起作用,它始終返回+0視圖

isset($_COOKIE[$cookiename])表達式總是返回false,即使cookie設置爲僅上面6行。

回答

1

setcookie()響應上增加了Set-Cookie:標題。

$_COOKIE包含瀏覽器在請求發送的Cookie。

當您使用setcookie()時,它不會立即影響$ _COOKIE,但下次您加載頁面時,$_COOKIE將具有您的價值,因爲瀏覽器已在請求中發送了Cookie數據。

您需要稍微重構一下代碼,以免在同一請求中使用setcookie之後在$ _COOKIE中檢查值。

+0

好的謝謝,我看到我無法檢查是否啓用cookies而不重新加載頁面 – 2013-03-10 17:41:23

0

setcookie只設置標題,即發送給客戶端。它不會更改$ _COOKIE超全球。另一方面 - $ _COOKIE充滿了客戶發送的cookies。因此,第一步 - 您使用setcookie設置cookie,並且$ _COOKIE中沒有任何內容,因爲客戶端尚未發送它,並且只會在下一個請求中發送。所以這是正常的,cookie不能立即在_COOKIE superglobal中使用。