【问题标题】:Count page views laravel 5.2计算页面浏览量 laravel 5.2
【发布时间】:2018-01-08 16:08:16
【问题描述】:

如何计算页面浏览量。每次保存到数据库中。请。我正在使用 laravel 5.2。 试了好几个包都不行?

【问题讨论】:

  • 为什么不直接使用 Google Analytics?无需数据库或额外代码。
  • 每次加载页面时都会增加一个计数器?这听起来不是很有用。有人可以坐在那里花几个小时刷新一个页面来弄乱你的统计数据。
  • 您说您尝试了一些解决方案,但这里不讨论它们。就你遇到的问题寻求帮助比寻求解决方案更有帮助和协作性。见:stackoverflow.com/help/mcve

标签: php html laravel


【解决方案1】:

您可以创建一个表来存储所有视图记录,这样您就可以统计视图,包括按会话、ip 等过滤。

首先,创建表:

Schema::create("browsing_history", function(Blueprint $table)
        {
            $table->engine = "InnoDB";

            $table->increments("id");
            $table->string("url");
            $table->string("session_id");
            $table->string("user_id");
            $table->string("ip");
            $table->string("agent");
            $table->timestamps();
        });

其次,创建对应的模型:

<?php namespace App\Models;

class BrowsingHistory extends \Eloquent {

    protected $table = 'browsing_history';

    public static function createLog() {
            $browsingHistory = new BrowsingHistory();
            $browsingHistory->url = \Request::url();
            $browsingHistory->session_id = \Request::getSession()->getId();
            $browsingHistory->user_id = \Auth::user()->id;
            $browsingHistory->ip = \Request::getClientIp();
            $browsingHistory->agent = \Request::header('User-Agent');
            $browsingHistory->save();
    }

}

第三,通过覆盖视图控制器的构建器将调用添加到日志:

public function __construct()
{
    BrowsingHistory::createLog();
}

要查询计数,忽略同一会话的命中:

public function countViewsPerSession($url)
{
    return BrowsingHistory::where("url", $url)
        ->groupBy("session_id")
        ->count();
}

【讨论】:

  • 每次F5增加一个值,没有办法设置一定的时间,是新增加的
  • @QUANGMAIVAN - 你有什么办法解决这个问题?
【解决方案2】:

实现此目的的最简单方法是为视图添加一个数据库列,并在每次为用户加载页面时增加它。然后,您可以按 IP 地址或发出请求的用户来分隔唯一视图。

【讨论】:

    【解决方案3】:

    感谢@Jean_Macros,我能够稍微解决这个问题

    我建议任何人关注@Jean_Macros 代码以获取详细信息,但要

    要停止每次重新加载页面的增量,请执行以下操作

    给你:

    将此代码放入您的模型中

    protected $table = 'page_view_counts';
    
    public static function createLog($page_owner_id) {
        $browser = new BrowserDetection(); //just a function i wrote
        // special values
        $address = getRealIp(); //just a function i wrote
        $browser = $browser->getName()." ver-".$browser->getVersion();
        $url = Request::url();
        $session_id = Request::getSession()->getId();
        $log_exists = (new PageViewCount)->where([['page_id', '=', $page_owner_id], ['session_id', '=', $session_id], ['url', '=', $url]])->exists();
            if (!$log_exists) {
                $pageViewCount = new DiaryViewCount();
                $pageViewCount->url = $url;
                $pageViewCount->session_id = $session_id;
                $pageViewCount->diary_id = $page_owner_id;
                $pageViewCount->address = $address;
                $pageViewCount->browser = $browser;
                $pageViewCount->save();
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多