2010-07-25 9 views
10

मैं ऐसी वेबसाइट के उपयोगकर्ता प्रबंधन भाग को विकसित कर रहा हूं जो वेबकास्ट होस्ट करेगा। लक्ष्य एक ही उपयोगकर्ता नाम (ईमेल पता) को समवर्ती रूप से उपयोग करने से रोकना है। यही है, हम नहीं चाहते कि दो व्यक्ति घटना को देखने के लिए एक लॉगिन का उपयोग कर रहे हों।PHP/MySQL साइट में समवर्ती उपयोगकर्ता लॉगिन को कैसे रोकें?

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

इसके बजाए, लॉगिन इतिहास या उपयोगकर्ता तालिका में लॉग इन स्थिति फ़ील्ड होना बेहतर होगा जो लॉग इन के लिए लॉग इन और 0 के लिए सेट किया गया है? लॉगिन और लॉगआउट पर मूल्य को अपडेट करने के लिए इसे संग्रहीत प्रक्रिया की आवश्यकता होगी, और जब उपयोगकर्ता लॉग इन स्थिति = 1, उपयोगकर्ता पहले से लॉग इन होता है और दूसरी बार लॉगिन नहीं कर सकता है तो उसे सत्यापित करने की आवश्यकता होगी। क्या यह एक व्यवहार्य दृष्टिकोण है?

कृपया अन्य विधियों को साझा करें जिन्हें आप एक ही लॉगिन प्रमाण पत्र को कई व्यक्तियों के बीच साझा करने से रोकने के लिए उपयोग करते हैं।

धन्यवाद, सिड

उत्तर

7

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

+1

"सत्र" के साथ "कुकी" बदलें, और यह अच्छी तरह से काम करेगा। बस प्रत्येक अनुरोध पर डेटाबेस के खिलाफ सत्र मान जांचना सुनिश्चित करें, और जब उपयोगकर्ता फिर से लॉग इन करता है तो हमेशा मान को रीसेट करने के लिए सुनिश्चित करें। पेज देखने की कोशिश कर रहे दो उपयोगकर्ता लगातार एक दूसरे को लॉग आउट करेंगे। – Charles

+0

हां, अच्छी कॉल, "सत्र" पढ़ने के लिए अद्यतन पोस्ट। – MrWhite

+0

मुझे आपका दृष्टिकोण पसंद है। एकमात्र चेतावनी यह होगी कि दूसरा उपयोगकर्ता, पहले से उपयोग में आने वाले लॉगिन का उपयोग करने का प्रयास करते समय, एक संदेश प्राप्त करता है जिसमें यूजर आईडी पहले से लॉग इन है, या उस प्रभाव के लिए कुछ है। हम यह सुनिश्चित करना चाहते हैं कि वेबकास्ट को देखने वाले प्रत्येक व्यक्ति के पास अपना लॉगिन प्रमाण-पत्र होगा। धन्यवाद :) – SidC

0

समस्या यहां पता लगा रहा है उपयोगकर्ता के प्रवेश (अर्थात कि क्या वह लॉगआउट नहीं हुआ था)।

डेटाबेस में अपनी अंतिम गतिविधि के समय और उसके स्पष्ट लॉगआउट के समय में पंजीकरण करना एक संभावित तरीका है। इसके बाद आप लॉगिन से इनकार कर सकते हैं अगर इसे 5 मिनट पहले अपेक्षाकृत कम से कम अपनी नवीनतम गतिविधि के लिए और यदि वह बीच में लॉगिन नहीं करता था तो उससे कम प्रयास किया गया था।

वेबसाइट पेज समय-समय पर जावास्क्रिप्ट के साथ सर्वर को मतदान करके "गतिविधि" को मजबूर कर सकते हैं।

+0

क्या ऐसा फ़ंक्शन बनाने के लिए संभव है जो लॉगइनिस्टिक तालिका की जांच करे, यह देखने के लिए कि उपयोगकर्ता के पास पिछले 5 मिनट में एक लॉगआउट लेनदेन के साथ लॉगिन लेनदेन है या नहीं? धन्यवाद :) – SidC

+0

@ सिडसी आप कर सकते हैं लेकिन फिर कोई और 5 मिनट के बाद लॉगिन कर सकता है। – Artefacto

0

यह निर्धारित करना आसान है कि कोई लॉग इन करता है। यह निर्धारित करना बहुत कठिन है कि कोई लॉग आउट करता है। यदि आपके पास किसी विशेष उपयोगकर्ता को वेबकास्ट स्ट्रीमिंग को जल्दी से मारने का तंत्र है, तो हो सकता है कि आप कुछ ऐसा करना चाहें जो उपयोगकर्ता से पूछता है कि यदि वे सोचते हैं कि कोई सक्रिय हो सकता है तो वे अपने अन्य सत्र को मारना चाहते हैं।

-3

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

आप उपयोगकर्ता आईडी से आईपी या सत्र कुकी में मैपिंग स्टोर कर सकते हैं और लॉग इन पेज पर विभिन्न जानकारी के साथ आने वाले अनुरोधों को रीडायरेक्ट कर सकते हैं। यदि उपयोगकर्ता लॉग इन करता है, तो अन्य सत्र को अंतिम पृष्ठ में अंतिम पृष्ठ में लॉगिन पृष्ठ पर अग्रेषित कर दिया जाएगा।

0

आप सर्वर पर उपयोगकर्ता सत्र कैसे कर रहे हैं? यदि आप उन्हें डीबी में संग्रहीत करते हैं, तो आप सक्रिय सत्रों से पूछ सकते हैं कि जब भी कोई लॉग इन करने का प्रयास करता है और देखता है कि वे पहले से मौजूद हैं या नहीं। बेशक आपको शायद किसी प्रकार का टाइमस्टैम्प भी देखना होगा क्योंकि आपको गारंटी नहीं है कि सत्र session.cc_maxlifetime पर गायब हो जाएंगे।

2

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

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

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