2017-02-15 72 views
0

应用程序写入Zend Framework 1.12。 我的影片可供url下:如何统计每个视频的独特视图

test.com/videos/video/id/1 
test.com/videos/video/id/2 
test.com/videos/video/id/3 
... 

在数量是从MySQL数据库生成的唯一参数。 我想统计每个视频的视图(唯一)。

VideosController我的视频动作看起来像:

public function videoAction() { 
    $video_id = $this->_getParam('id', 0); 
    $hits = new Application_Model_DbTable_Hits(); 
    $hit = $hits->fetchRow($hits->select()->where('belongs_to_video = ?', $video_id)); 

    if (!isset($_SESSION['views']) || !($_SESSION['views'] == $video_id){ 
     $_SESSION['views'] = $video_id; 
     $newViews = $hit->count + 1; 
     $data = array('count' => $newViews,);  
     $hits->update($data); 
    } 

} 

它的工作原理,但是,没有一个正确的方式。在访问特定的视频后(不刷新网站之后),在去另一个视图之后也会升高(在不刷新网站之后),但在回到第一个视图之后,他们再次上升(他们不应该)。

任何帮助表示赞赏。

+0

为什么在会话中保持意见? – Naincy

+0

确实会话不适合这个你需要一个表“视图”,你在哪里存储video_id,ip,datetime ..当你可以使用这个查询来为每个视频选择独特的视图(独特的ip)'SELECT video_id,COUNT(DISTINCT ip )从视图GROUP BY video_id ORDER BY video_id' –

回答

1

会议不是一个很好的解决方案。我建议您记录IP地址并创建阻止Cookie以避免重复录制视频。

IP地址记录:这是避免记录多个视图的好方法。您只需在观看者观看完视频(或任何您观看的内容)后立即在数据库中放入记录,并在下次检查记录是否存在于我们的数据库中。

阻止Cookie:您也可以在浏览器的浏览器中放置阻止Cookie。这非常有效避免记录多个视图。您需要在观看者观看视频时发送cookie,并在第二次尝试时检查cookie是否存在。

在我看来,IP地址记录就足够了。如果您的网站包含会员系统,则可以简单地实施IP地址记录(但不是IP地址,而是在那里记录user_ids)。