इसलिए मैंने यहां टिप्पणियों के आधार पर थोड़ा सा खेला। मैं जो आया उसके साथ एक साधारण क्षेत्र में एक काउंटर गिन रहा है। मेरे ऐप में मेरे पास एक दृश्य संपत्ति के साथ कोड स्निपेट इकाइयां हैं I
एक टुकड़ा एक विधि देखा जाता है तो (सफेद सूची) ब्राउज़रों सिर्फ तुम क्या उम्मीद है कि होना चाहिए बाहर फिल्टर:
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);
}
संग्रहीत प्रक्रिया फिर एक अलग तालिका का उपयोग करता अस्थायी रूप से नवीनतम विचारों जो टुकड़ा ईद की दुकान धारण करने के लिए , दर्ज तिथि और आईपी पता। प्रत्येक दृश्य लॉग होता है और जब कोई नया दृश्य आता है तो यह देखने के लिए कि क्या उसी आईपी पते ने पिछले 2 मिनट में इस स्निपेट को एक्सेस किया है या नहीं। अगर ऐसा कुछ भी लॉग नहीं है।
यदि यह एक नया दृश्य है तो दृश्य लॉग है (फिर SnippetId, आईपी, दर्ज) और वास्तविक दृश्य फ़ील्ड स्निपेट तालिका पर अपडेट किया गया है।
यदि यह कोई नया दृश्य नहीं है तो तालिका को 4 मिनट से अधिक पुराने किसी भी दृश्य के साथ साफ़ किया गया है। इसके परिणामस्वरूप किसी भी समय व्यू लॉग टेबल में प्रविष्टियों की न्यूनतम संख्या होनी चाहिए।
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
यह काफी अच्छी तरह से काम करने के लिए लगता है:
यहाँ संग्रहीत proc है। जैसा कि अन्य ने उल्लेख किया है यह सही नहीं है लेकिन ऐसा लगता है कि यह प्रारंभिक परीक्षण में काफी अच्छा है।
आप एक बहुत कठिन सवाल पूछ रहे हैं। बस इस बारे में सोचें कि Google क्लिक mfraud समस्या से कैसे निपटता है और आपको यह पता चल जाएगा कि आपके प्रश्न के कितने बड़े हो सकते हैं। – backslash17
मैं सहमत हूं .. एक आसान मुद्दा नहीं .. हालांकि मैंने हमेशा सोचा है कि वेब सर्वर अच्छे विश्लेषण समाधान क्यों नहीं देते हैं। मैं उस पर Google Analytics को थप्पड़ मारता हूं और इसे कॉल करता हूं .. जब तक कि आप स्वीकार्य रूप से टूटे हुए व्हील को फिर से शुरू करने की कोशिश नहीं कर रहे हों। – madcolor
समझा, लेकिन यही कारण है कि मैं यहां पूछ रहा हूं: -}। मैं यहां वास्तव में विश्लेषिकी के बाद नहीं हूं, लेकिन कम से कम अर्ध-भरोसेमंद विचारों की संख्या दिखाने के लिए SO पर समान काउंटर। –