2012-05-31 5 views
1

나는 각 사용자가 한 번만 계산할 수 있도록 question_views이라는 테이블에서 각보기를 기록하는 위치까지 설정했습니다.등록되지 않은 사용자의 조회수를 구현하는 방법은 무엇입니까?

그러나 문제가 있습니다. 현재 로그인하지 않은 상태에서 등록되지 않은 사람 (또는 로그인하지 않은 사람)을 식별 할 방법이 없으므로보기 수가 증가합니다.

나는 그들이 볼 때의 데이터베이스에 사용자가 입력하는 방법이 있습니다 :

사용자가 로그인하지
function add_view($user, $question) { 
    $ts = time(); 
    $check = mysql_num_rows(mysql_query("SELECT * FROM question_views WHERE user='$user' AND question_id=$question")); 
    if($check==0) { 
     mysql_query("UPDATE questions SET views=views+1 WHERE qid=$question"); 
     mysql_query("INSERT INTO question_views (user,question_id,date) VALUES ($user,$question,$ts)"); 
    } 
} 

, '케이 (어떤 함수가 호출 될 때 전달되는 것입니다) $_SESSION['userid'] 심지어 존재합니다.

등록되지 않은 사람을 포함하여 조회수 계산 시스템을 한 번만 계산할 수있는 좋은 방법은 무엇입니까?

편집 : 물론 그것을 신뢰할 수있는 방법이 아닙니다. 그러나 거기에 적어도 다소 좋은 방법입니다.

+6

신뢰할 수있는 방법은 없습니다. IP 주소, 세션, 쿠키 또는이 세 가지 조합을 사용할 수 있습니다. 하루가 끝나면, 당신은 신뢰할 수 없다. – Corbin

+0

확인. 그래도 downvote 무엇입니까? 누구든지 그것을 downvoted, 설명하는 시간을내어 주셔서 감사합니다. – Nathan

+0

@Nathan'$ _SESSION [ 'userid'] = 'guest_'를 설정하면 시스템이 완전히 깨질 수 있습니까? uniqid();'로그인하지 않은 사용자에게 guest 사용자 ID가 주어 지도록 하시겠습니까? 물론 뷰 개수를 늘리려면 쿠키를 비활성화해야하지만 작동 할 수는 있습니다. – drew010

답변

3

코빈이 맞습니다. 개인적으로 나는 쿠키를 사용하고 싶습니다. IP는 여러 사람이 공유 할 수 있으며 세션은 사용자가 브라우저를 닫을 때까지 계속됩니다. 나는 쿠키가 최선의 방법이라고 생각하지만 물론 삭제 될 수 있습니다. 평생을 '영원히'또는 긴 간격으로 설정하십시오.

+0

Nastier 솔루션은 제거 후 재생할 수 있기 때문에 플래시 쿠키라고합니다 .-) –

+0

@ 잭 그게 전부예요. HTML5의 모든 사람입니다. : 정확한 수는 필요하지 않습니다. 가능할 수도 있음).하지만 게스트가 페이지를 새로 고칠 때마다 증가 할 수도 없습니다. 나는 쿠키와 함께 갈 것 같아. 세션 변수는 너무 단순하기 때문에 사용하려고했지만 쿠키가 더 좋습니다. – Nathan

+0

@Nathan 나는 "깔끔한"이라고 말하지 않았고, 나는 "이상하게"라고 말했습니다. :) –

관련 문제