2016-02-18 4 views
6

मेरे पास ठीक काम कर रहा है। उपयोगकर्ता लॉग इन और आउट कर सकते हैं, कोई समस्या नहीं है। बात यह है कि, यदि उपयोगकर्ता लॉगिन साझा करते हैं, तो वे सभी एक ही समय में लॉग इन हो सकते हैं। अच्छा नही।उपयोगकर्ताओं को केकपीएचपी 3 के साथ एक सत्र में कैसे सीमित करें?

मैं CakePHP पता है जब एक उपयोगकर्ता के प्रवेश करने की जरूरत है, जो मुझे लगता है एक प्रक्रिया का उपयोग शुरू किया है:

'Session' => [ 
    'defaults' => 'database' 
] 

प्रति Sessions पुस्तक पेज के रूप में।

तब मैं खो गया हूं। जब तक मैंने इसे याद नहीं किया है, तब तक उपयोगकर्ताओं को एक सक्रिय सत्र में सीमित करने का कोई संदर्भ नहीं है। क्या कोई इस से पहले आया है और यदि हां, तो आप इसके आसपास कैसे काम करते थे?

स्पष्टता के लिए

:

सभी कुकीज़ ब्राउज़र में नष्ट कर दिया सभी सत्रों डीबी & से हटा = कुछ भी नहीं में सेट या तो/उपयोगकर्ताओं/प्रवेश पृष्ठ (संयोग से, इस ट्यूटोरियल के अनुसार स्थापित किया गया है का दौरा जब - फैंसी कुछ भी नहीं)।

लॉग इन = सत्र id ब्राउज़र में कुकी के लिए इसी के साथ DB में निर्धारित किया है। वास्तव में आप क्या उम्मीद करेंगे।

लॉगआउट (जो फिर वापस पुनर्निर्देश लॉगइन करने के लिए) = पुराना सत्र हटाया तो DB और कुकी में किसी अन्य के द्वारा बदल दिया। अलग आईडी तो कुछ समय समाप्त हो चुकी कुकी उठा रहा है और इसे ताज़ा कर रहा है। हम्म।

जानकारी कुकी में आयोजित सिर्फ सत्र id है। डीबी में यह बस है:

सत्र आईडी | एक ब्लॉब | समाप्ति समय

+2

चूंकि आप डेटाबेस सत्र का उपयोग कर रहे हैं, तो आप उस उपयोगकर्ता के लिए सत्र तालिका से पूछ सकते हैं जब वह उपयोगकर्ता लॉग इन करने से पहले उस उपयोगकर्ता के सभी सत्रों में लॉग इन करता है और हटा देता है। हालांकि यह एक कामकाज है। कुछ हद तक प्रासंगिक: http://stackoverflow.com/questions/21022677/how-to-find-list-of-all-logged-in-users-in-cakephp-2-x – dragmosh

+0

इसके लिए धन्यवाद। मैंने उस बिंदु पर प्रगति की है जहां सत्र लॉगआउट पर हटा दिया गया है, लेकिन जब उपयोगकर्ता को उपयोगकर्ता/लॉगिन पेज पर रीडायरेक्ट किया जाता है तो उन्हें तुरंत पुन: बनाया जाता है (बिना लॉग इन किए! यह मुझे पागल कर रहा है!)। मुझे यह कुकी/सत्र सेट करने वाला नहीं मिल रहा है। चरणों को समझाने के लिए: कोई कुकी विज़िट/उपयोगकर्ता/लॉगिन (कोई कुकी/सत्र सेट) वाला उपयोगकर्ता, लॉग इन (सभी ठीक सत्र डीबी में दिखाता है), लॉग आउट (डीबी में सत्र मारे गए) और/उपयोगकर्ताओं/लॉगिन पर रीडायरेक्ट किया गया है । फिर, लॉग इन प्रॉम्प्ट पर बैठे बिना उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है, उपयोगकर्ता के पास डीबी में एक सक्रिय सत्र होता है। अजीब। – pmelon

+0

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

उत्तर

4

मुझे लगता है कि आप डेटाबेस में users और sessions बचाते हैं (डिफ़ॉल्ट रूप से केकेपीएचपी में इसे sessions नाम दिया जाता है)।

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

लॉग कार्रवाई पर कार्य करें:

UPDATE `users` SET `active_session`='$session_id'; 

उपयोगकर्ता एक पृष्ठ है कि प्रवेश करना पड़ता है करने के लिए चला जाता है, तो आपको उस मूल्य खोज:

SELECT * FROM `users` WHERE `active_session` = '$session_id'; 

तो अन्य जगह में उपयोगकर्ता के संकेत, पिछले सत्र कुंजी ओवरवाइटन हो जाता है, और उपरोक्त चयन खाली परिणाम-सेट देता है।

अपडेट से पहले पुराने सत्र टोकन को साफ़ करना संभव है, इसलिए इस तरह के पुराने सत्र प्रति उपयोगकर्ता आधार पर नष्ट हो जाएंगे।


सावधान रहें, यदि आप AuthComponent उपयोग कर रहे हैं, यह सत्र में ही बारी बारी से कर सकते हैं, अधिक जानकारी आप the corresponding section of CakePHP manual में मिल सकता है के लिए।

मैं निश्चित रूप से AuthComponent-way जाना चाहते हैं, और नहीं CakePHP में पहिया फिर से आविष्कार होगा।

+1

इसके लिए बहुत बहुत धन्यवाद - परीक्षण और रिपोर्ट करेगा। परीक्षण से अब तक ऐसा लगता है कि AuthComponent केवल लॉगआउट/टाइमआउट पर सत्र आईडी बदलता है। – pmelon

+0

@pmelon - आपके परीक्षण के परिणामों को सुनने के लिए तत्पर हैं। मुझे जल्द ही एक परियोजना पर इस सटीक स्थिति का सामना करना पड़ रहा है। – Kingsolmn

+1

@ फ़ारसाइड - प्रतिक्रिया के लिए धन्यवाद, मुझे आश्चर्य है कि इस प्रश्न को कोई प्यार मिलेगा! एक विस्तृत प्रतिक्रिया के लिए भी धन्यवाद। – Kingsolmn

0

मैं अपने सेल फोन करने के लिए उपयोगकर्ताओं टाई। हर दिन उन्हें twilio एसएमएस के माध्यम से एक नया 6 अंक कोड मिलता है। लॉग इन साझा करना मुश्किल बनाता है, लेकिन असंभव नहीं है।आखिरकार, मैं ट्रैक करना चाहता हूं कि उपयोगकर्ता प्रति दिन कितनी अलग मशीनों का उपयोग करते हैं और कुछ उचित उपयोग सीमाएं स्थापित करते हैं। यदि कोई उपयोगकर्ता एक दिन में तीन या चार मशीनों का उपयोग करता है, तो यह ठीक है, लेकिन जब वे एक ही उपयोगकर्ता आईडी को एक दिन में बीस या पचास मशीनों पर उपयोग करना शुरू करते हैं, तो यह एक समस्या हो सकती है।

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

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