在Zend Controller上设置cookie

时间:2012-08-09 20:33:54

标签: php zend-framework cookies zend-framework-mvc

我们正在尝试为访问我们网站的每个用户创建一个唯一ID。我对Zend和MVC模式都比较新,所以我不确定应该在哪里设置cookie以及如何设置。

php非常直接:

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

$lxid = $_COOKIE['mx_uid'];

我尝试将其放入View中,并遇到了在每个加载的新页面上重新生成cookie的问题,因此如果它们在网站上转到20页,则会有20个Cookie。

此外,我需要在每个页面上使用“$ lxid”变量内联而不刷新,因为javascript片段将捕获cookie内容。

有没有人以这种方式在Zend上使用过cookies?

2 个答案:

答案 0 :(得分: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, '/');  
      }  
  }  
}  

答案 1 :(得分:0)

你也想设置cookie路径(第4个参数):

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始终包含值。