2017-02-15 1 views
0

アプリケーションはZend Framework 1.12で書かれています。 マイ動画はurlの下で利用可能です:各ビデオのユニークなビューを数える方法

数は、MySQL DBから生成された固有のパラメータである
test.com/videos/video/id/1 
test.com/videos/video/id/2 
test.com/videos/video/id/3 
... 

。 各動画の再生回数をカウントしたい(一意)。

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); 
    } 

} 

それは動作しますが、しかし、ない正しい方法で:VideosController

マイビデオアクションは次のようになります。特定のビデオビューを訪問した後に(サイトをリフレッシュした後)、別のビューにも行った後に(サイトをリフレッシュした後)上昇しますが、最初のものに戻った後、再び上昇します。

助けてください。

+0

なぜあなたはセッションでビューを保持していますか? – Naincy

+0

本当にセッションはこれには適していません。あなたはvideo_id、ip、datetime ..を保存するテーブル "view"が必要です。このクエリを使ってビデオごとに一意のビュー(一意のIP)を選択できるとき 'SELECT video_id、COUNT(DISTINCT ip )ビューからGROUP BY video_id ORDER BY video_id' –

答えて

1

セッションはこれには適していません。重複したビューの記録を避けるために、IPアドレスを記録してブロッククッキーを作成することをお勧めします。

IPアドレスのログ:これは、複数のビューを記録するのを避けるための良い方法です。視聴者がビデオを見終わったらすぐにデータベースに記録を入れ、次回はそのレコードがデータベースに存在するかどうかをチェックするだけです。

ブロックするCookie:ブロックするCookieを視聴者のブラウザに配置することもできます。これは、複数のビューの記録を避けるためにはかなり効果的です。視聴者が動画を見て、2回目の試行でCookieが存在するかどうかを確認するときに、Cookieを送信する必要があります。

私の意見では、IPアドレスロギングで十分です。 Webサイトにメンバーシップシステムが含まれている場合、IPアドレスロギングを実装するだけで済みます(IPアドレスの代わりにuser_idsをログに記録します)。

関連する問題