跟踪未登录的用户在Yii/PHP


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

如果我们是正确的,每次你看到这个用户是guest并且没有cookie,那么你就在创建一个新的临时用户。

为什么不先检查是否设置了cookie,如果是,然后创建临时用户?您最终需要设置2个cookie:初始的临时cookie进行检查,然后是'dc_tempusername' cookie。

你甚至可以使用browcap来检查已知的bot:
https://github.com/browscap/browscap-php
http://browscap.org/

您需要能够在php.ini

中定义browscap
相关文章: