我们正在尝试为每个访问我们网站的用户创建一个唯一的ID。我对 Zend 和 MVC 模式相对较新,所以我不确定应该在哪里设置饼干以及如何设置。
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?
如果您需要在一个会话中设置 cookie 一次,请将它们放在 frontController 插件中。添加到您的应用.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, '/');
}
}
}
您还需要设置 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
始终包含一个值。