2009-07-29 13 views
7

वेब पेज काउंटर को लागू करने का एक अच्छा तरीका क्या है?एक विश्वसनीय वेब पेज काउंटर कैसे कार्यान्वित करें?

सतह पर यह एक साधारण समस्या है, लेकिन खोज इंजन क्रॉलर और रोबोट से निपटने पर समस्याग्रस्त हो जाती है, उसी उपयोगकर्ता द्वारा कई क्लिक, क्लिक रीफ्रेश करते हैं।

विशेष रूप से यह सुनिश्चित करने का एक अच्छा तरीका क्या है कि लिंक बार-बार क्लिक करके उपयोगकर्ता द्वारा 'क्लिक अप' नहीं किया जाता है? आईपी ​​पता? कुकीज़? इनमें से दोनों में कुछ कमियां हैं (आईपी पते जरूरी नहीं हैं, कुकीज़ बंद कर दी जा सकती हैं)।

डेटा स्टोर करने का सबसे अच्छा तरीका क्या है? एक काउंटर को व्यक्तिगत रूप से बढ़ाएं या लॉग क्लिक में रिकॉर्ड के रूप में प्रत्येक क्लिक को स्टोर करें, फिर कभी-कभी सारांशित करें।

किसी भी लाइव अनुभव मददगार होगा,

+++ रिक ---

+1

आप एक बहुत कठिन सवाल पूछ रहे हैं। बस इस बारे में सोचें कि Google क्लिक mfraud समस्या से कैसे निपटता है और आपको यह पता चल जाएगा कि आपके प्रश्न के कितने बड़े हो सकते हैं। – backslash17

+0

मैं सहमत हूं .. एक आसान मुद्दा नहीं .. हालांकि मैंने हमेशा सोचा है कि वेब सर्वर अच्छे विश्लेषण समाधान क्यों नहीं देते हैं। मैं उस पर Google Analytics को थप्पड़ मारता हूं और इसे कॉल करता हूं .. जब तक कि आप स्वीकार्य रूप से टूटे हुए व्हील को फिर से शुरू करने की कोशिश नहीं कर रहे हों। – madcolor

+0

समझा, लेकिन यही कारण है कि मैं यहां पूछ रहा हूं: -}। मैं यहां वास्तव में विश्लेषिकी के बाद नहीं हूं, लेकिन कम से कम अर्ध-भरोसेमंद विचारों की संख्या दिखाने के लिए SO पर समान काउंटर। –

उत्तर

2

इसलिए मैंने यहां टिप्पणियों के आधार पर थोड़ा सा खेला। मैं जो आया उसके साथ एक साधारण क्षेत्र में एक काउंटर गिन रहा है। मेरे ऐप में मेरे पास एक दृश्य संपत्ति के साथ कोड स्निपेट इकाइयां हैं 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 है। जैसा कि अन्य ने उल्लेख किया है यह सही नहीं है लेकिन ऐसा लगता है कि यह प्रारंभिक परीक्षण में काफी अच्छा है।

0

आप PHP का उपयोग करने के लिए, आप सत्र का उपयोग कर सकते विशेष उपयोगकर्ताओं की गतिविधि पर नज़र रखने के लिए मिलता है। डेटाबेस के साथ संयोजन में, आप विशेष आईपी पते से गतिविधि ट्रैक कर सकते हैं, जिसे आप एक ही उपयोगकर्ता मान सकते हैं।

हिट सीमित करने के लिए टाइमस्टैम्प का उपयोग करें (उदाहरण के लिए प्रति सेकंड 5 सेकंड से अधिक हिट नहीं मानें), और यह बताएं कि साइट पर नई "विज़िट" कब होती है (यदि अंतिम हिट 10 मिनट पहले खत्म हो गई थी, उदाहरण के लिए) ।

आपको $ _SERVER [] गुण मिल सकते हैं जो आपको बॉट या विज़िटर ट्रेंड (जैसे ब्राउज़र उपयोग) का पता लगाने में सहायता करते हैं।

संपादित करें: मैंने & पहले हिट ट्रैक किया है, हिट के रूप में पृष्ठ दृश्य की गणना की है, और नए सत्र के निर्माण के दौरान +1 पर विज़िट किया है। यह काफी भरोसेमंद था (प्रयोजनों के लिए पर्याप्त विश्वसनीय से अधिक। ब्राउज़र जो कुकीज़ का समर्थन नहीं करते हैं (और इस प्रकार, सत्रों का समर्थन नहीं करते हैं) और सत्र अक्षम करने वाले उपयोगकर्ता आजकल काफी असामान्य हैं, इसलिए मैं चिंता नहीं करता इसके बारे में जब तक अत्यधिक सटीक होने का कारण नहीं है।

+0

आईपी पते दीर्घकालिक आधार पर विश्वसनीय नहीं हैं – Cameron

+0

एएसपी.नेट (एमवीसी) का उपयोग करना और हालांकि सत्र एक विकल्प है, यह रोबोट से कुकी-कम पहुंच में मदद नहीं करेगा। प्लस सत्र में थोड़ा अधिक ओवरहेड है कि इस ऐप को अन्यथा इसकी आवश्यकता नहीं होगी। –

4

सत्रों के साथ आईपी पते का उपयोग करें। आईपी पते के लिए हर नए सत्र को अपने काउंटर के खिलाफ एक हिट के रूप में गिनें। अगर आप सोचते हैं तो आप इस डेटा को लॉग डेटाबेस में स्टोर कर सकते हैं आपको कभी भी इसकी आवश्यकता होगी। यह गणना करने के लिए उपयोगी हो सकती है कि आपकी साइट को सबसे अधिक ट्रैफ़िक कब मिलता है, प्रति दिन कितना ट्रैफ़िक, प्रति आईपी इत्यादि।

0

यदि मैं आप थे, तो मैं हार मानूंगा मेरा काउंटर पहली जगह सटीक है। हर समाधान (जैसे कुकीज़, आईपी पते इत्यादि), जैसा कि आपने कहा था, अविश्वसनीय हो जाता है। इसलिए, मुझे लगता है कि आपकी प्रणाली में अनावश्यकता का उपयोग करना आपकी सबसे अच्छी शर्त है: कुकीज, "फ्लैश-कुकीज़" (साझा ऑब्जेक्ट्स), आईपी पते (शायद उपयोगकर्ता-एजेंटों के साथ), और लॉग इन करने वाले लोगों के लिए उपयोगकर्ता आईडी का उपयोग करें।

आप किसी प्रकार की योजना को कार्यान्वित कर सकते हैं जहां किसी अज्ञात ग्राहक को एक अद्वितीय आईडी दी जाती है, जो क्लाइंट की मशीन पर संग्रहीत (उम्मीद है) हो जाती है और प्रत्येक अनुरोध के साथ फिर से प्रेषित होती है। फिर आप प्रत्येक अद्वितीय आईडी और इसके विपरीत एक आईपी पता, उपयोगकर्ता एजेंट, और/या उपयोगकर्ता आईडी (साथ ही कुछ भी आप सोच सकते हैं) बांध सकते हैं। प्रत्येक क्लिक का टाइमस्टैम्प और अद्वितीय आईडी किसी डेटाबेस तालिका में कहीं भी लॉग किया जा सकता है, और प्रत्येक क्लिक (कम से कम, आपकी वेबसाइट पर प्रत्येक क्लिक) को उसी अद्वितीय आईडी के लिए अंतिम क्लिक कितना हालिया था, इस पर निर्भर करता है या इनकार कर दिया जा सकता है। यह शायद अल्पकालिक क्लिक-विस्फोटों के लिए पर्याप्त विश्वसनीय है, और दीर्घकालिक इससे कोई फर्क नहीं पड़ता है (क्लिक-अप समस्या के लिए, पेज काउंटर नहीं)।

दोस्ताना रोबोटों के पास उचित रूप से पहचाने जाने और वास्तविक लोगों से अलग तरीके से निपटाए जाने के लिए ज्ञात रोबोट उपयोगकर्ता एजेंटों (मुझे एक साधारण Google खोज के बाद एक here मिला) की एक सूची के खिलाफ उचित रूप से सेट किया जाना चाहिए और मुझे चेक किया जा सकता है।

+0

धन्यवाद कैमरून। यह वह जगह है जहां मैं इस बिंदु पर हूं। सवाल का मुद्दा यह देखने के लिए किया गया है कि कोई बेहतर दृष्टिकोण उपलब्ध है या नहीं। –

संबंधित मुद्दे