2010-06-12 5 views
7

मेरे पास एक चल रहा django/apache2 + memcached ऐप (उबंटू) है और ऑनलाइन लॉग इन उपयोगकर्ताओं के ट्रैक रखना चाहता हूं।डीजेंगो वेब ऐप में 'अंतिम बार देखा गया' फ़ंक्शन लागू करने का सबसे अच्छा तरीका क्या है?

इसे ट्रैक करने का सबसे अच्छा तरीका क्या होगा?

जब भी उपयोगकर्ता लॉग इन उपयोगकर्ता को पृष्ठ लोड करता है तो मैं डेटाबेस को लिखना पसंद नहीं करता; लेकिन क्या अन्य विकल्प हैं?

+0

तो यह आपके लिए कैसे निकला? मुझे आपके अपने समाधान में दिलचस्पी होगी ... – mawimawi

उत्तर

4

एक दृष्टिकोण हो सकता है:

कुकी कहा जाता है 'ऑनलाइन' के लिए
  • जांच, लेकिन केवल तभी जब उपयोगकर्ता प्रमाणीकृत है
  • यदि:

    आप एक मिडलवेयर करता है बनाने process_response पर निम्नलिखित कुकी वहाँ

    • कुकी कहा जाता है निर्धारित मूल्य के साथ 'ऑनलाइन' नहीं है, '1'
    • lifesp सेट 10 मिनट के लिए कुकी
    • अद्यतन 'LAST_LOGIN' वर्तमान दिनांक
अब

आप सभी वर्तमान में आपके auth.User तालिका में उन में प्रवेश करने वाले के साथ इस प्रयोक्ता के लिए auth.User के क्षेत्र का एक । सभी उपयोगकर्ता जिनके पास timetime.now() - अंतराल (15minutes) से last_login नया है "ऑनलाइन" माना जा सकता है।

प्रत्येक लॉग इन उपयोगकर्ता के लिए प्रत्येक 10 मिनट के लिए डेटाबेस लिखा जाएगा। अपनी आवश्यकताओं के लिए मान "10" और "15" समायोजित करें।

यहां लाभ यह है कि डेटाबेस लिखने दुर्लभ हैं (आपकी दो संख्यात्मक सेटिंग्स 10/15 के अनुसार)। और स्पीड ऑप्टिमाइज़ेशन के लिए सुनिश्चित करें कि last_login अनुक्रमित है, इसलिए इस क्षेत्र पर एक फ़िल्टर वास्तव में तेज़ है।

उम्मीद है कि इससे मदद मिलती है।

+1

मुझे यह विचार पसंद है सिवाय इसके कि मैं ऑथ अपडेट नहीं करूंगा।उपयोगकर्ता का last_login फ़ील्ड। मैं एक उपयोगकर्ता प्रोफाइल मॉडल या शायद एक और मॉडल अद्यतन करेंगे। आप इसे गैर-प्रमाणीकृत उपयोगकर्ताओं तक कैसे बढ़ाएंगे? मुझे लगता है कि कई बॉट कुकीज़ का उपयोग नहीं करेंगे। आपको किसी भी तरह से आईपी पते के माध्यम से ट्रैक करना पड़ सकता है। –

1

एक हैशपैप या मेमोरी में एक कतार जिसमें हर घंटे चलने वाले कार्य के साथ स्मृति जारी है।

0

आप डेटाबेस/लगातार स्टोरेज का उपयोग किये बिना django में ऐसा नहीं कर सकते हैं क्योंकि डेटाबेस में django सत्र संग्रहीत किए जाते हैं: आपके अनुप्रयोगों के कई उदाहरण चल रहे हैं और उन्हें अपने राज्यों + डेटा को सिंक्रनाइज़ करना होगा एक एकल दृढ़ता स्रोत के माध्यम से [1]

वैकल्पिक रूप से, आप इस जानकारी को उपयोगकर्ता आईडी के नाम वाली फ़ाइल में किसी फ़ोल्डर में लिखना चाहते हैं और फिर आवश्यक जानकारी ढूंढने के लिए इसकी निर्माण/संशोधित दिनांक जांचना चाहते हैं।

+1

Django सत्र डेटाबेस में संग्रहीत करने की आवश्यकता नहीं है। उन्हें कैश में रखा जा सकता है। –

1

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

मेमकैड और रेडिस की चाबियां समाप्त हो जाती हैं। आपने शायद पहले से ही memcached स्थापित किया है, तो इसका उपयोग करें।

आप प्रत्येक यात्रा पर user:last-seen:$username कुंजी के समाप्ति समय को रीसेट कर सकते हैं, या आप माविमावी की कुकी तकनीक का उपयोग कर सकते हैं और समाप्ति = 4 * कुकी लाइफटाइम कर सकते हैं।

+0

लेकिन आप कैश से कौन से उपयोगकर्ता ऑनलाइन हैं, यह कैसे पुनर्प्राप्त करेंगे, टेम्पलेट टैग में डिस्प्ले के लिए कहें? –

+0

मुझे लगता है कि ओपी केवल उपयोगकर्ता थंबनेल और प्रोफाइल पृष्ठों पर "ऑनलाइन अभी" लाइटबुल चाहता था, और सूची दिखाने के लिए बहुत सारे ऑनलाइन उपयोगकर्ता थे। दूसरों ने विभिन्न मान्यताओं के साथ उत्तर दिया है। – Tobu

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

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