2014-10-27 54 views
0

我有這樣的代碼在PHP頁面:

if(!isset($_COOKIE[$cookie_name])) { 
    if(!setcookie($cookie_name, mt_rand(), time() + (86400 * 30), "/")) { 
     die("[ERROR COOKIE] Failed to set cookie!"); 
    } 
} 

如果我沒有在我的瀏覽器的cookie任意設定第一次頁面加載$_COOKIE[$cookie_name]設置爲0。之後,如果我重新加載頁面,則按預期設置爲隨機數。

到目前爲止,我只是做一個解決方法是這樣的:

if(!isset($_COOKIE[$cookie_name])) { 
    if(!setcookie($cookie_name, mt_rand(), time() + (86400 * 30), "/")) { 
     die("[ERROR COOKIE] Failed to set cookie!"); 
    } 
    if($_COOKIE[$cookie_name] == 0) { 
     echo "<meta http-equiv=\"refresh\" content=\"0; url=./\" />"; 
     die(); 
    } 
} 

但我想明白的是爲什麼在第一時間setcookie()函數默認爲0

+0

你怎麼檢查它的第一次? '$ _COOKIE'超全局將不會從'setcookie()'獲得新值,直到重新加載後。這是預料之中的。 – 2014-10-27 15:50:32

回答

1

它沒有。它默認爲NULL,因爲它尚未設置。

setcookie只是將Set-Cookie標題添加到要發送到瀏覽器的標題列表。這是header("Set-Cookie: ...");的便利快捷方式,可以爲您進行格式設置。它不是修改超全球$_COOKIE

你可以,當然,自己動手:

function updatecookie($name,$val,$exp=0,$path="/",$domain="",$secure=false,$httponly=false) { 
    $ret = setcookie($name,$val,$exp,$path,$domain,$secure,$httponly); 
    if($ret) $_COOKIE[$name] = $val; 
    return $ret; 
} 
+0

是的,我認爲$ _COOKIE [$ name]是在調用setcookie()之後設置的,但現在,感謝您的回覆,我明白$ _COOKIE [$ name]會從瀏覽器中獲取保存的cookie。 – 2014-10-27 16:02:07