2017-02-15 73 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)。