Zend插件为每个访问者捕获引用者

时间:2012-06-23 16:50:17

标签: zend-framework zend-view zend-controller zend-controller-plugin

为我们的网站构建一些简单的分析 - 我试图捕获用户登陆我们页面的源,如果他最终注册 - 将源存储在数据库中。

由于此代码必须在所有页面上 - 我想将其添加到layout.phtml中 这是我到目前为止(只是草稿)

$ref_cookie = $_COOKIE["xyzcom-referrer"];
if(!Zend_Auth::getInstance()->hasIdentity() && $ref_cookie==null) {
$ref=null;
$ref=$_GET['ref'];
if($ref==null || strlen($ref)==0)
    $ref= $_SERVER["HTTP_REFERER"];
//set in cookie incase user returns later and registers
setcookie("xyzcom-referrer",$ref);
}

它非常自我解释 - 如果用户没有登录 - 我试图通过ref参数或通过HTTP_REFERRER获取引用者。我将其存储在cookie中的原因是用户可能今天访问该网站,但一周后注册。

因此,每次用户注册时,我都会看到是否设置了此cookie - 如果是 - 我将获取该值并将其作为引用源插入数据库中。

这是解决这个问题的最好方法吗? 或者我应该像控制器插件一样编写 - 如果是这样我该怎么做呢。 谢谢你的提示。

1 个答案:

答案 0 :(得分:2)

布局实际上不是这种逻辑的地方,所以我建议将它移动到控制器插件。这应该是直截了当的,创建一个插件类,用前端控制器注册它,并在类中创建一个preDispatch方法(如手册中所述)并将代码移动到该方法。

您的代码也存在一些问题:

  • 您假设将设置HTTP_REFERER,但可能不会。

  • 您正在设置一个仅会话cookie(当用户关闭他/她的浏览器时将被删除)没有路径(这意味着如果它设置在您网站上的子目录中,它将无法使用你的主页)。您需要向setcookie()提供第3和第4个参数来解决这些问题。