0

我们正在尝试为访问我们网站的每个用户创建一个唯一的 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'];

我试图将其放入视图中,但遇到了在加载的每个新页面上都会重新生成 cookie 的问题,因此如果他们访问网站上的 20 个页面,那么他们就有 20 个 cookie。

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

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

4

2 回答 2

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, '/');  
      }  
  }  
}  
于 2012-08-09T20:57:54.567 回答
0

您还需要设置 cookie 路径(第 4 个参数):

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

请注意,您可能无法在您设置它的同一脚本中访问 c​​ookie(即,直到他们访问的下一页才会起作用)。所以更好的逻辑可能是:

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

于 2012-08-09T20:46:15.960 回答