2017-02-15 5 views
0

Anwendung wird in Zend Framework 1.12 geschrieben. Meine Videos sind unter url:So zählen Sie jedes Video einzigartige Ansichten

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

wo die Zahl ein eindeutiger Parameter von MySQL DB erzeugt wird. Ich möchte Ansichten von jedem Video (einzigartig) zählen.

Mein Video Aktion in VideosController wie folgt aussieht:

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

} 

Es funktioniert jedoch nicht in einem richtigen Weg. Nach dem Besuch bestimmter Video-Ansichten steigen (nach dem Aktualisieren der Website nicht), nach dem Besuch einer anderen Ansichten auch steigen (nach der Aktualisierung der Website nicht), aber nach dem Zurückkommen auf die erste steigen sie wieder (sie sollten nicht).

Jede Hilfe wird geschätzt.

+0

Warum behalten Sie Ansichten in der Sitzung? – Naincy

+0

in der Tat Sitzungen sind nicht gut für diese benötigen Sie eine Tabelle "view", wo Sie die video_id, ip, datetime .. Wenn Sie diese Abfrage verwenden können, um eindeutige Ansichten (eindeutige ip) pro Video auswählen SELECT video_id, COUNT (DISTINCT ip) FROM-Ansicht GROUP BY video_id ORDER BY video_id' –

Antwort

1

Sitzungen sind keine gute Lösung dafür. Ich empfehle Ihnen, die IP-Adresse zu protokollieren und Blockierungscookies zu erstellen, um doppelte Aufrufe zu vermeiden.

Protokollierung der IP-Adresse: Dies ist eine gute Methode, um das Protokollieren mehrerer Ansichten zu vermeiden. Alles, was Sie brauchen, ist, einen Datensatz in die Datenbank aufzunehmen, sobald der Zuschauer das Video (oder was auch immer Sie als angesehen haben) betrachtet und das nächste Mal überprüft, ob der Datensatz in unserer Datenbank existiert.

Cookies blockieren: Sie können auch blockierende Cookies in den Browsern Ihrer Betrachter einfügen. Dies ist ziemlich effektiv, um das Aufzeichnen mehrerer Ansichten zu vermeiden. Sie müssen einen Cookie senden, wenn ein Zuschauer das Video ansieht und im zweiten Versuch prüft, ob der Cookie vorhanden ist.

Meiner Meinung nach IP-Adresse Logging ist genug dafür. Wenn Ihre Website ein Mitgliedschaftssystem enthält, können Sie einfach die IP-Adress-Protokollierung implementieren (aber anstelle von IP-Adressen melden Sie dort Benutzer-IDs an).

Verwandte Themen