[英]Tracking non logged-in users in Yii/PHP
我正在尝试跟踪我网站上所有未登录用户的操作。 目的是存储此活动,以便我可以在创建帐户时将其添加到其个人资料中。
我使用下面的行为为新用户分配一个cookie,并使用该cookie作为我的Users表中“临时用户”行的基础。 这样,用户可以立即开始与我的API进行交互。
这似乎工作正常。 但是,我发现在我的数据库中创建了更多的“临时用户”行,而不是我访问该网站的访问者数量 - 大约为2500,而昨天约为500次访问(根据谷歌分析)。
下面的行为有什么问题,或者我做错了什么? 有没有更好的办法?
<?php
class ApplicationBehavior extends CBehavior
{
private $_owner;
public function events()
{
return array(
'onBeginRequest' => 'setCookies'
);
}
public function setCookies()
{
$owner = $this->getOwner();
if ($owner->user->getIsGuest() && !isset(Yii::app()->request->cookies['dc_tempusername'])):
$tempusername = genRandomString(20);
$tempuser = new User();
$tempuser->username = $tempusername;
$tempuser->email = "noemailyet@tempuser.com";
if (isset(Yii::app()->request->cookies['dc_tempusername'])) {
$tempuser->name = Yii::app()->request->cookies['dc_tempusername']->value;
} else {
$tempuser->name = "CookieBasedTempuser";
}
$tempuser->points = 1;
$tempuser->firstip = $_SERVER['REMOTE_ADDR'];
if ($tempuser->validate()) {
Yii::app()->request->cookies['dc_tempusername'] = new CHttpCookie('dc_tempusername', $tempusername);
$cookie = new CHttpCookie('dc_tempusername', $tempusername);
$cookie->expire = time() + 60 * 60 * 24 * 180;
Yii::app()->request->cookies['dc_tempusername'] = $cookie;
$tempuser->save();
} else {
echo CHtml::errorSummary($tempuser);
}
endif;
}
}
?>
检查cookie是否先启用:
检查cookie是否已启用
如果我们是正确的,那么每当您看到用户是访客并且没有cookie时,您就会创建一个新的临时用户。
为什么不检查是否首先设置cookie,如果是,那么创建临时用户? 您最终需要设置2个cookie:要检查的初始临时cookie,然后是'dc_tempusername'
。
您甚至可以使用Browscap来检查已知的机器人:
https://github.com/browscap/browscap-php
http://browscap.org/
您需要能够在php.ini中定义browscap
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.