2009-06-25 4 views
1

이 코드를 사용하여 주제보기를 업데이트합니다.주제의 "보기"를 저장하는 가장 좋은 방법

UPDATE topics 
SET views = views + 1 
WHERE id = $id 

문제는 사용자가 우스운 양의보기를 얻기 위해 F5에 스팸을 좋아한다는 점입니다.

고유 한 조회수를 얻으려면 어떻게해야합니까? IP를 저장하는 새 테이블을 만드시겠습니까? 쿠키에 저장하고 싶지 않습니다. 쿠키를 삭제하는 것은 너무 쉽습니다.

답변

2

이 정보를 저장하기위한 별도의 테이블을 만들 것입니다. 그런 다음 더 많은 양의 데이터를 캡처 할 수 있으며 가장 많이 읽힐 가능성이있는 테이블을 업데이트 할 필요가 없습니다. 당신은 항상 tblTopicViews INTO INSERT를 사용합니다

...

그리고 당신만큼 당신이 할 수있는 정보, IP 주소, 히트의 날짜와 시간, 브라우저 버전에 아마도 몇 가지 정보를 캡처 할 것, 운영 체제 등등 - 당신이 손을 댈 수있는 것은 무엇이든간에. 그렇게하면 시간 경과에 따라 새로 고침 요청을 필터링하는 방법을 미세 조정할 수 있습니다.

많은 사용자가 IP를 공유 할 수 있다는 점을 명심해야합니다. 예를 들어 사무실 전체가 동일한 라우터를 경유 할 수 있습니다.

+1

+1 별도의 테이블을 만드는 것이 주 사이트 성능에 영향을 미치지 않도록 이동하는 방법입니다. –

0

글쎄, 요리 또는 IP 주소와 같은 정보를 식별하는 것을 포함하여 개별 페이지 히트를 로그 테이블에 기록 할 수 있습니다. 여가 시간에 그 테이블을 분석 할 수 있습니다.

그러나 웹 서버에는이 기능이 있습니다. IIS와 Apache 모두 자세한 사용 현황 로그를 만들 수 있음을 알고 있습니다. 그리고 두 가지 모두에있어 IP 주소와 같은 것을 유지하는 다양한 그래프 및 분석 도구가 있습니다.

그래서 자신의 로깅을 롤링하는 대신 웹 서버를 사용할 수 있습니다.

내가 순 시청자를 저장하는 테이블을 만들 것입니다
1

: 사람이 페이지에 액세스하고 사용자 당 하루에 하나 개의보기를 허용하려면

지금
CREATE TABLE unique_views(
    page_id number, 
    user_agent varchar2(500), 
    ip_address varchar2(16), 
    access_time date, 
    PRIMARY KEY (page_id, user_agent, ip_address, access_time) 
) 

, 당신은

INSERT INTO unique_views (:page_id, :user_agent, :ip_address, trunc(SYSDATE, 'day')) 

을 할 수있는 하루 동안 동일한 사용자에 대해 중복보기를 허용하지 않습니다.

SELECT page_id, count(*) page_views 
FROM unique_views 
WHERE access_time = trunc(SYSDATE, 'day') 
GROUP BY page_id 
0

당신은 obiously 각을 추적하기 위해 별도의 테이블이 필요, 다른 사용자를 구별하기 위해 SESSION_ID()를 사용할 수 있습니다 : 당신은 (오늘의 견해에 대한 예) BY 간단한 GROUP 각 페이지에 대한 의견을 셀 수 방문.

업데이트 : 방금 쿠키에 의존하고 싶지 않아주의를 기울 였으므로 적합하지 않을 수 있습니다.

0

다양한 문제 (예 : 캐시 서버의 알 수없는 동작)로 인해 이러한 종류의 문제는 항상 부정확하고 다양한 요인 사이의 균형을 유지하게됩니다. 그러나 막연하고 안전한 카운터의 경우 칼 바텔 (Karl Bartel)과 다른 테이블을 사용하는 것이 좋습니다.

그러나이 문제를 얼마나 심각하게 생각 하느냐에 따라 "user_agent"를 생략 할 수 있습니다. 위조하기가 쉽습니다. 히트 카운터를 부풀려 싶으면 user-agent = "bot1"로 내 페이지를 호출 한 후 "bot2"와 같은 IP에서 다시 호출하는 스크립트

그러나 한 IP 뒤에 2 명의 사용자가 한 번만 기록되므로 정확도가 떨어집니다. 다양한 요인 간의 균형에 대해 어떤 의미가 있는지 확인해보십시오.

관련 문제