2017-02-15 2 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을 저장하는 테이블 "보기"가 필요합니다.이 쿼리를 사용하여 비디오 당 고유 한보기 (고유 IP)를 선택할 수있는 경우'SELECT video_id, COUNT (DISTINCT ip)보기에서 GROUP BY video_id ORDER BY video_id' –

답변

1

세션은이 문제에 대한 좋은 해결책이 아닙니다. IP 주소를 기록하고 복제보기를 기록하지 않도록 차단 쿠키를 만드는 것이 좋습니다.

IP 주소 로깅 : 여러보기를 기록하지 않는 것이 좋습니다. 시청자가 동영상 (또는 시청 한 것으로 간주하는 것)을 시청하자 마자 데이터베이스에 레코드를 저장하고 다음에 레코드가 데이터베이스에 있는지 확인하십시오.

차단 쿠키 : 차단 쿠키를 시청자의 브라우저에 넣을 수도 있습니다. 이는 여러보기를 기록하지 않도록 상당히 효과적입니다. 시청자가 동영상을 시청하고 두 번째 시도에서 쿠키가 있는지 확인하려면 쿠키를 보내야합니다.

내 의견으로는 IP 주소 로깅이면 충분합니다. 웹 사이트에 회원 시스템이 포함되어 있으면 IP 주소 로깅을 구현할 수 있습니다 (단, IP 주소 대신 user_ids를 기록).

관련 문제