だから私はここのコメントに基づいて少しこれを使って遊んだ。私が思いついたのは、簡単なフィールドでカウンターを数えることです。私のアプリケーションでは、Viewsプロパティを持つコードスニペットエンティティがあります。
public bool LogSnippetView(string snippetId, string ipAddress, string userAgent)
{
if (string.IsNullOrEmpty(userAgent))
return false;
userAgent = userAgent.ToLower();
if (!(userAgent.Contains("mozilla") || !userAgent.StartsWith("safari") ||
!userAgent.StartsWith("blackberry") || !userAgent.StartsWith("t-mobile") ||
!userAgent.StartsWith("htc") || !userAgent.StartsWith("opera")))
return false;
this.Context.LogSnippetClick(snippetId, IpAddress);
}
ストアドプロシージャが、その後一時的にスニペットIDを保存、最新のビューを保持するために別のテーブルを使用しています。うまくいけば、ブラウザでなければなりませんだけで何
スニペットが表示されている場合の方法は除外さ(ホワイトリスト) 、入力された日付とIPアドレス。各ビューがログに記録され、新しいビューが到着すると、直近2分以内に同じIPアドレスがこのスニペットにアクセスしたかどうかが確認されます。もしそうなら、何も記録されません。
新しいビューの場合は、ビューが記録され(SnippetId、IP、入力済み)、実際のビューフィールドがスニペットテーブルで更新されます。
新しいビューでない場合は、4分を超えて記録されたビューでテーブルがクリーンアップされます。これにより、いつでもViewログテーブルにエントリ数が少なくなります。
ここでストアドプロシージャです:
ALTER PROCEDURE [dbo].[LogSnippetClick]
-- Add the parameters for the stored procedure here
@SnippetId AS VARCHAR(MAX),
@IpAddress AS VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
-- check if don't allow updating if this ip address has already
-- clicked on this snippet in the last 2 minutes
select Id from SnippetClicks
WHERE snippetId = @SnippetId AND ipaddress = @IpAddress AND
DATEDIFF(minute, Entered, GETDATE()) < 2
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO SnippetClicks
(SnippetId,IpAddress,Entered) VALUES
(@SnippetId,@IpAddress,GETDATE())
UPDATE CodeSnippets SET VIEWS = VIEWS + 1
WHERE id = @SnippetId
END
ELSE
BEGIN
-- clean up
DELETE FROM SnippetClicks WHERE DATEDIFF(minute,Entered,GETDATE()) > 4
END
END
は、これはかなりうまく動作するようです。他の人が言ったように、これは完璧ではありませんが、最初のテストでは十分だと思われます。
あなたは非常に難しい質問をしています。クリックミスの問題をGoogleがどのように扱うのか考えてみると、あなたの質問のアスワルの大きさについての考えが得られます。 – backslash17
私は同意します。簡単な問題ではありません。なぜWebサーバーが優れた分析ソリューションを提供していないのか疑問に思っています。私はそれについてGoogleアナリティクスを叩いて、それを完了と呼んでいると言っている。確かに壊れた車輪を再発明しようとしていない限り。 – madcolor
わかりましたが、私はここでそれを求めています: - }。私は実際にここでの分析を行っているわけではありませんが、少なくとも半分の信頼性の高いビューの数を表示するためにここに似ているカウンターです。 –