2012-08-09 57 views
0

我們正試圖爲訪問我們網站的每個用戶創建一個唯一的ID。我對Zend和MVC模式比較陌生,所以我不確定應該在哪裏設置cookie以及如何設置。在Zend Controller上設置Cookie

的PHP是非常簡單的:

if(!isset($_COOKIE['mx_uid'])){ 
    $expire = time()+60*60*24*30; 
    setcookie('mx_uid', uniqid('mx_'), $expire); 
} 

$lxid = $_COOKIE['mx_uid']; 

我試圖把這個進入查看,衝進了Cookie是加載的每一個新的頁面上再生的問題,因此,如果他們去20那麼他們有20個餅乾。

此外,我需要在每個頁面上使用「$ lxid」變量而不刷新,因爲JavaScript片段將捕獲cookie內容。

有沒有人在Zend上以這種方式使用過cookies?

回答

1

如果您需要在一次會話期間設置一次cookie,請將它們放在frontController插件中。添加到您的app.ini
resources.frontController.plugins.a.class = "YourNamespace_Plugin_Cookies"

然後你的插件看起來像

class YourNamespace_Plugin_Cookies extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $cookie = $request->getCookie('mx_uid'); 
     if(empty($cookie)){ 
      setcokkie('mx_uid',$lxid,$expire, '/'); 
     } 
    } 
} 
0

你要設置Cookie路徑,以及(4 PARAM):

setcookie('mx_uid', uniqid('mx_'), $expire, '/'); 

要知道,你可能無法在您所設置它在同一個腳本中訪問的cookie(即它不會工作,直到他們訪問的下一頁)。因此,更好的邏輯可能是:

if (isset($_COOKIE['mx_uid'])){ 
    $lxid = $_COOKIE['mx_uid']; 
} else { 
    $lxid = uniqid('mx_'); 
    $expire = time()+60*60*24*30; 
    setcookie('mx_uid', $lxid, $expire, '/'); 
} 

確保$lxid將始終包含的值。

+0

感謝添!就MVC而言,我應該在Controller中還是在View中進行設置? – HjalmarCarlson 2012-08-09 20:54:38

+0

不是視圖。很難知道哪裏是適當的,而不知道獨特的價值是什麼,但可能控制器,如果你只在一次使用它,控制器插件,如果你想使用它(或它應該設置)整個網站。 – 2012-08-09 20:58:12