2012-08-09 126 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