应用程序用Zend Framework 1.12
编写。
我的视频位于url
:
test.com/videos/video/id/1
test.com/videos/video/id/2
test.com/videos/video/id/3
...
其中number是从MySQL DB生成的唯一参数。 我想计算每个视频的视图(唯一)。
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 :(得分:1)
会话不是一个很好的解决方案。我建议您记录IP地址并创建阻止cookie,以避免记录重复的视图。
IP地址记录:这是避免记录多个视图的好方法。您只需在观众完成观看视频(或您计入观看的任何内容)后立即在数据库中放入记录,下次检查记录是否存在于我们的数据库中。
阻止Cookie :您还可以在观看者中添加阻止Cookie'浏览器。这对于避免记录多个视图非常有效。您需要在观看者观看视频时发送cookie,并在第二次尝试时检查cookie是否存在。
在我看来, IP地址记录就足够了。如果您的网站包含会员系统,则可以简单地实施IP地址记录(但不是IP地址,而是在那里记录user_ids)。