2011-01-09 28 views
0

を操作することがないようにするためにカウンターの景色を保護します。は、私はこのコードを持って

どのようにしてこのカウンタをこのセッションまたは他の方法で保護できますか?

+0

一意の訪問回数をカウントしたいだけですか? – Jonah

+0

はいこれは私が意味することです。 – Swell

答えて

1

セッション変数を(hasBeenCounted)で設定できます。設定されている場合は、増分しません。

if(!isset($_SESSION['hasBeenCounted']) 
{ 
    $id = $_GET['id']; 
    mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'"); 
    $_SESSION['hasBeenCounted'] = "counted"; 
} 

EDIT:

session_start(): 

はあなたが上のセッションを使用するすべてのページの最上部にする必要があります。

+0

+1シンプルで清潔です。 '$ _SESSION'で猿鍵する前に' session_start() 'を使う必要があるかもしれません。さもなければ、エラーが発生します。 –

+0

@Mike:そのリマインダーを含めるために私の答えを編集しました。 –

+0

私はそれを残している理由を理解しています.. 2回呼び出すとエラーもスローされます:p –

0

これを行う1つの方法は、セッションを使用することです。しかし、結局、それは本当にスケーラブルではありません。ユーザーがサイトを移動する際に、大量のセッションファイルが存在する可能性があります。さらに、ユーザーが新しいセッションを作成するたびに、そのビューを記録します。

単一のユーザーに対して1つのビューのみを記録する場合は、そのユーザーがそのスレッドを表示したことを保存する必要があります。あなたのサイトでログインしているユーザーだけがスレッドを表示できるかどうか、またはサイトが一般公開されているかどうかによって、各ユーザーの固有のものを別のテーブルに格納しなければなりません。フィールドタイプ):

CREATE TABLE `thread_views` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`thread_id` INT(10) UNSIGNED NOT NULL , 
`user_id` INT(10) UNSIGNED NOT NULL , 
`ts` TIMESTAMP NOT NULL 
) 

ユーザーがスレッドを閲覧するたびに、あなたはこの表をチェックする必要があります。 thread_viewsにレコードがない場合は、1つを挿入し、テーブルのviews列をインクリメントします。 thread_viewsに行がある場合、そのユーザーは既にスレッドを見たことがわかります。

0

私はクッキーとのセッションはあなたのベストショットだと思う。最初の訪問後にCookieを設定したい場合は、Cookieがすでに設定されている場合は、ビューカウンタを更新しないでください。

構文は次のようになります。

$expire=time()+2592000; //This is set to expire in 1 month (in seconds) 
setcookie("visitor", "Already Visited", $expire); 

これは私がそれを実装する方法を次のとおりです。

if !(isset($_COOKIE["visitor"])) 
{ 
    $expire=time()+2592000; //This is set to expire in 1 month (in seconds) 
    setcookie("visitor", "Already Visited", $expire); 
    $id = $_GET['id']; 
    mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'"); 
} 
0
$id = $_GET['id']; 

if(!isset($_SESSION['hasBeenCounted']) || $_SESSION['hasBeenCounted'] != $id) 
    { 
    mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'"); 
    $_SESSION['hasBeenCounted'] = $id; 
    } 

私は、コードを変更したし、それが機能するようになりました。

関連する問題