[英]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.