2013-01-31 29 views
14

एक कुकी को कैसे वैध करता है?
फ्रेमवर्क चलाएं सत्र और कुकीज़ कैसे काम करते हैं?

  • मैंने देखा है कि बाद मैं सर्वर मैं अभी भी भले ही मैं डेटाबेस में किसी सत्र डेटा presist नहीं है में लॉग इन किया गया था को पुनः आरंभ।
  • मैं भी कि मैं सर्वर पर तारीख तय कर सकता है बड़ा हो सकता है कि कुकी के exipry तारीख और अभी भी मैं में लॉग इन किया गया था देखा।
  • मैं लॉग आउट (एक पाठ करने के लिए कुकी बचाया फ़ाइल) और ब्राउजर ने कुकी खो दी। तब मैं ने कुकी फ़ाइल से कुकी को फिर से बनाया और मैं फिर से लॉग इन हुआ।

कुकी इस तरह दिखता है:

PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-userid% 3A1

// My logout code 
def logout() = Action { 
    Ok("").withNewSession 
} 

From the documentation
पूरे सत्र को छोड़ने से
वहाँ विशेष आपरेशन कि निरस्त कर देती है पूरा सत्र:

Ok("Bye").withNewSession 

उत्तर

5

मुझे the documentation और अधिक ध्यान से पढ़ने और विभिन्न भागों को जोड़ने का जवाब मिला।

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


यह समझना महत्वपूर्ण है कि सत्र और फ्लैश डेटा सर्वर द्वारा संग्रहीत नहीं हैं, लेकिन कुकी तंत्र का उपयोग करते हुए प्रत्येक अनुवर्ती HTTP अनुरोध करने के लिए जोड़ रहे हैं, महत्वपूर्ण है। इसका मतलब है कि डेटा का आकार बहुत सीमित (4 केबी तक) है और आप केवल स्ट्रिंग मानों को स्टोर कर सकते हैं।


तो है कि मैं क्या डर था कि अगर कुकी खो जाना किसी के भविष्य के सभी सर्वर में लॉग इन कर सकते हैं था।

मैं सुरक्षित करने के लिए इस एक स्व-निर्मित टाइमस्टैम्प प्राधिकरण जोड़ने (कुकी में समय स्टांप बचाने के लिए और Sever पक्ष को मान्य)

+0

"अगर कुकी खो जाती है तो कोई भी भविष्य में सर्वर में लॉग इन कर सकता है", इसका क्या अर्थ है? यदि कोई कुकी नहीं है, तो कोई एक्सेस नहीं है, यह सभी क्लाइंट साइड है, Play बस सुनिश्चित करता है कि (हस्ताक्षरित) कुकी स्वयं को छेड़छाड़ नहीं की गई है। – virtualeyes

+1

शून्य के रूप में खोने के बारे में मत सोचो लेकिन भटक गए। – Farmor

+1

भविष्य में, कृपया संबंधित दस्तावेज़ों से लिंक करें, ताकि आपके उत्तरों के पाठकों को आगे की जांच कर सकें। – Cheeso

10

आप उपयोगकर्ताओं को कैसे प्रमाणित करते हैं निर्दिष्ट नहीं किया जा सकता है क्या करना है, तो मैं क्या बस अनुमान लगाओ, कि आप; सरल नमूना का उपयोग कर रहे हैं जो ... सरल है।

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

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

AFAIR मानक मेमोरी कैश आवेदन के प्रत्येक पुनरारंभ पर साफ़ कर दिया जाएगा, सुनिश्चित करें कि सभी sess_keys डीबी से और साथ आप Global object का उपयोग करें और onStart(...) विधि में तालिका में काट-छांट कर सकते हैं हटा दिया जाएगा बनाने के लिए।

+0

क्या इस बिंदु पर प्ले प्ले सत्र ईको-सिस्टम (जहां तक ​​प्रमाणीकरण जाता है) से बाहर रहना उचित है? मैं सेश आईडी का प्रबंधन करने के लिए अर्ध-टिकाऊ कैश के लिए रेडिस का उपयोग करने और सार्वजनिक सत्र डेटा संग्रहीत करने के लिए अलग-अलग प्ले सत्रों का उपयोग करने के बारे में सोच रहा हूं। यह अच्छी योजना की तरह लगता है? –