2010-08-20 8 views
13

मैं आंतरिक प्रशासन के लिए वेबसाइट पर औसत समय (जैसे Google Analytics करता है) ट्रैक करने के लिए देख रहा हूं।साइट पर उपयोगकर्ता समय को ट्रैक करने के लिए कैसे करें

ऐसा करने का सबसे आसान तरीका क्या है?

+2

क्या आप Google Analytics डेटा का उपयोग नहीं कर सकते? – ChrisF

+2

पहले से ही एक दर्जन पैकेज हैं जो ऐसा करते हैं। यदि आपको नहीं करना है तो पहिया को फिर से न लगाएं। वेबलाइज़र, awstats, urchin, आदि में देखो यह वास्तव में एक गैर-मामूली समस्या है। "साइट पर समय" को परिभाषित करने के लिए कुछ मान्यताओं की आवश्यकता होती है, क्योंकि आप केवल तब जानते हैं जब कोई ब्राउज़र सामग्री का अनुरोध करता है, न कि जब कोई उपयोगकर्ता विंडो बंद करता है, किसी दूरस्थ साइट पर नेविगेट करता है, आदि –

+0

हम एक नौकरी बोर्ड की पेशकश कर रहे हैं जो प्रशासकों को आने की अनुमति देता है उपयोगकर्ताबेस के विशिष्ट सेगमेंट पर नियंत्रण रखें और हम उनके लिए प्रशासनिक विश्लेषण प्रदान करना चाहते हैं। – Walker

उत्तर

18

आप अगले मायनों में समय प्राप्त कर सकते हैं:

  1. एक बार जब उपयोगकर्ता, अपनी साइट पर जाएँ कुकी में वर्तमान समय की बचत के रूप में "का दौरा किया", और अगली यात्रा पर आप इसे प्राप्त कर सकते हैं, अगर यह स्थापित किया गया था।
  2. और अधिक महंगी विधि: जब पृष्ठ लोड होता है, तो जेएस टाइमर शुरू करें, और पेज अनलोड पर सर्वर समय पर भेजें जिसे उपयोगकर्ता ने भेजा और इसे डीबी में सहेज लिया।
  3. और यदि window.unload ओपेरा में काम नहीं करता है, तो आप हर 5 सेकंड में सर्वर पर समय भेज सकते हैं, और इसे डीबी में स्टोर कर सकते हैं।

यदि आपको आवश्यकता है, तो मैं एक उदाहरण स्क्रिप्ट लिख सकता हूं।

अद्यतन:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Collect time</title> 
     <script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
     <script type="text/javascript"> 
     $(function() 
     { 
      var start = null; 
      $(window).load(function(event) { 
       start = event.timeStamp; 
      }); 
      $(window).unload(function(event) { 
       var time = event.timeStamp - start; 
       $.post('/collect-user-time/ajax-backend.php', {time: time}); 
      }) 
     }); 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 

और बैकएंड स्क्रिप्ट:

<?php 
$time = intval($_POST['time']); 
if (!file_exists('data.txt')) { 
    file_put_contents('data.txt', $time . "\n"); 
} else { 
    file_put_contents('data.txt', $time . "\n", FILE_APPEND); 
} 

लेकिन जैसा कि मैंने कहा

+1

यह 'window.onunload' – jordanstephens

+0

हाँ आप सही हैं - मैंने गलती की है, मुझे क्षमा करें –

+0

बहुत बढ़िया, मदद के लिए धन्यवाद - यदि आपके पास त्वरित लिखने का समय है तो मुझे एक स्क्रिप्ट देखना अच्छा लगेगा? क्या मैं पूरे डोमेन पर पेज.नलोड का उपयोग कर सकता हूं? – Walker

5

मुख्य तरह से मैं के बारे में सोच सकते हैं:

जब उपयोगकर्ता पहले एक पृष्ठ को हिट करता आप लॉग इन करें, कहते हैं, उनके आईपी पता, पृष्ठ लोड है, और समय। फिर, जब वे पृष्ठ छोड़ते हैं, तो कुछ जावास्क्रिप्ट और AJAX का उपयोग करते हुए, आप unload ईवेंट का उपयोग AJAX हैंडलर को भेजने के लिए करते हैं जो पृष्ठ को रिकॉर्ड करता है और जब वे जाते हैं।

पृष्ठ विज़िट को संग्रहीत करने के लिए आपको किसी सत्र के अलावा किसी प्रकार की आईडी का उपयोग करने की आवश्यकता होगी। मान लें कि मेरे पास होमपेज के 5 उदाहरण खुले हैं, आप प्रत्येक को अलग-अलग लॉग इन करना चाहते हैं। तो, कुछ इस तरह:

  1. पहुँच पृष्ठ, एक कोड जेनरेट (मान लें पेज: index.php कोड: 2345)
  2. स्टोर यह उनकी आईपी के साथ एक डेटाबेस तालिका, और में यात्रा समय
  3. अनलोड घटना आग,, AJAX कॉल पेज गुजर & कोड
  4. आईपी, पृष्ठ, और कोड के लिए डीबी में देखो, और लॉग छुट्टी समय

अगर वे ०१२३१३६६११८७ जाएँफिर से, आप एक और कोड उत्पन्न करेंगे, कहें, 36789। एक यादृच्छिक GUID उत्पन्न करने वाला कुछ उपयोग सर्वोत्तम है, इसलिए आप एक ही आईपी/पेज/कोड संयोजन पर टकराव की किसी भी संभावना को अनदेखा कर सकते हैं (अनिवार्य रूप से)।

+1

और ओपेरा ब्राउज़र अनलोड ईवेंट पर काम नहीं करता है, तो आप क्या करेंगे? –

+1

@ दिमाकर्सुन मुझे नहीं पता कि यह एक मुद्दा होगा। सोचा कि यह सभी ब्राउज़रों में समर्थित था, लेकिन मैंने ओपेरा को बिल्कुल भी छुआ नहीं है। प्रति दिन कुछ नया सीखें। – Tarka

2

वहाँ वास्तव में इसे ओपेरा ब्राउज़र पर काम wouldn `t एक प्रभावी तरीका नहीं है PHP के साथ ऐसा करने के लिए, क्योंकि PHP सर्वर-साइड है और पेज बंद होने पर यह निर्धारित करने का कोई तरीका नहीं है। इसे निर्धारित करने के लिए आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता है।

मैं क्या करूंगा window.onload पर टाइमर शुरू करने के लिए जावास्क्रिप्ट का उपयोग करें और फिर window.onunload पर टाइमर समाप्त करें। फिर आप डेटा स्टोर कर सकते हैं और जो भी आप चाहते हैं उसे कर सकते हैं।

0

$ (विंडो)। उपयोगकर्ता छोड़ने वाले पृष्ठ को ट्रैक करने के लिए एक बहुत अच्छा फ़ंक्शन है।

लेकिन एक बिंदु तब होता है जब खिड़की अनजान भेजने के लिए अनजान भेजने के लिए कभी-कभी काम करता है, जब उपयोगकर्ता पृष्ठ छोड़ देता है तो AJAX समाप्त नहीं होता है। इसलिए आपको AJAX में एक विशेषता (async: false) जोड़ने की आवश्यकता है, कोड उड़ा है:

$.ajax({ 
        type: 'POST', 
        async: false, 
        url: '/collect-user-time/ajax-backend.php', 
        data: {time: time} 
       });