रेल सत्र सत्र के लिए कई भंडारण तंत्र प्रदान करता है। सबसे महत्वपूर्ण ActiveRecord::SessionStore
और ActionDispatch::Session::CookieStore
हैं।
कई सत्र स्टोरेज हैं, यानी रेल जहां सत्र हैश और सत्र आईडी बचाता है। अधिकांश वास्तविक-लाइव अनुप्रयोग प्रदर्शन और रखरखाव के कारणों के कारण फ़ाइल संग्रहण पर ActiveRecord::SessionStore
(या इसके डेरिवेटिव्स में से एक) का चयन करते हैं। ActiveRecord::SessionStore
सत्र आईडी और हैश को डेटाबेस तालिका में रखता है और प्रत्येक अनुरोध पर हैश को बचाता है और पुनर्प्राप्त करता है।
रेल 2 ने एक नया डिफ़ॉल्ट सत्र भंडारण, CookieStore
पेश किया। CookieStore
क्लाइंट-साइड पर सीधे कुकी में सत्र हैश बचाता है। सर्वर कुकी से सत्र हैश पुनर्प्राप्त करता है और सत्र आईडी की आवश्यकता को समाप्त करता है। इससे एप्लिकेशन की गति में काफी वृद्धि होगी, लेकिन यह एक विवादास्पद स्टोरेज विकल्प है और आपको इसके सुरक्षा प्रभावों के बारे में सोचना होगा:
कुकीज़ 4kB की सख्त आकार सीमा दर्शाती हैं। यह ठीक है क्योंकि आपको पहले बताए गए सत्र में बड़ी मात्रा में डेटा स्टोर नहीं करना चाहिए। सत्र में वर्तमान उपयोगकर्ता की डेटाबेस आईडी को संग्रहीत करना आमतौर पर ठीक है। ग्राहक आपके द्वारा सत्र में संग्रहीत सब कुछ देख सकता है, क्योंकि यह स्पष्ट-पाठ में संग्रहीत होता है (वास्तव में बेस 64-एन्कोडेड, इसलिए एन्क्रिप्टेड नहीं)। तो, ज़ाहिर है, आप यहां किसी भी रहस्य को स्टोर नहीं करना चाहते हैं। सत्र हैश छेड़छाड़ को रोकने के लिए, एक पाचन की गणना सर्वर से साइड गुप्त के साथ की जाती है और कुकी के अंत में डाली जाती है। इसका मतलब है कि इस भंडारण की सुरक्षा इस रहस्य पर निर्भर करती है (और डाइजेस्ट एल्गोरिदम पर, जो SHA512 पर डिफ़ॉल्ट है, जिसे अभी तक समझौता नहीं किया गया है)। तो एक छोटे से रहस्य का प्रयोग न करें, यानी एक शब्दकोष का शब्द, या 30 वर्णों से कम
एक सुधार; मान एन्क्रिप्ट नहीं किया गया है लेकिन डिफ़ॉल्ट रूप से एन्कोड किया गया है (बेस 64 के साथ)। – Cem
हालांकि सवाल रेल 3 के बारे में था, जिसमें कुकीज़ केवल एन्कोड की गई थी, यह ध्यान देने योग्य है कि रेल 4 उन्हें एन्क्रिप्ट करता है। – sheldonh
रेल 4 एन्क्रिप्ट क्यों करता है? कोई उपाय? , क्या यह रेल ऐप के लिए महंगा नहीं होगा जो हर अनुरोध को एन्क्रिप्ट/डिक्रिप्ट करता है? –