रेल मौजूदा प्रथाओं का पालन करता है


83

किसी को भी रेल और सत्र के लिए कोई "सर्वोत्तम अभ्यास" युक्तियां हैं? रेल 3 के लिए डिफ़ॉल्ट सत्र प्रकार अभी भी कुकीस्टोर है, है ना? मैंने थोड़ी देर के लिए SqlSessionStore का उपयोग किया और यह अच्छी तरह से काम किया, लेकिन मैं कुकीस्टोर के पक्ष में इससे दूर जा सकता हूं।

क्या यह अभी भी संवेदनशील जानकारी के लिए कुकीस्टोर का उपयोग करने के लिए एक अच्छा विचार नहीं है, यहां तक ​​कि नमकीन जानकारी के साथ या क्या यह डीबी में बेहतर संग्रहीत है?


1
इसके अलावा, सत्र भंडारण के लिए Memcached का उपयोग करने के आसपास वर्तमान विचार क्या हैं?
लुकास

जवाबों:


102

कुकी-आधारित डिफ़ॉल्ट के बजाय सत्र के लिए डेटाबेस का उपयोग करें, जिसका उपयोग अत्यधिक गोपनीय जानकारी संग्रहीत करने के लिए नहीं किया जाना चाहिए

के साथ सत्र तालिका बनाएँ

rake db:sessions:create

माइग्रेशन चलाएं

rake db:migrate

सुनिश्चित करें कि आप अपने सत्रों को प्रबंधित करने के लिए ActiveRecord का उपयोग करने के लिए रेल भी बताते हैं।

रेल 3

config / initializers / session_store.rb:

Rails.application.config.session_store :active_record_store

रेलें २

config / environment.rb:

config.action_controller.session_store = :active_record_store

2
मैंने पिछली बार सुना था कि सत्रों के लिए एस्टोर सुपर धीमा था। किसी को भी बेंचमार्क का पता है?
लुकास

4
यदि आप सेशन टेबल की ग्रोथ देखते हैं और अपने काम के हिसाब से इसे प्रून करने के लिए सेटअप करते हैं तो आपके पास प्रदर्शन के मुद्दे नहीं होंगे।
बिल लीपर

3
क्या इससे विवाद पैदा होता है?
डेविड मौरिसियो

4
यहाँ पर, रेल 3.2, यह TheNameOfMyApplication :: Application.config.session_store: active_record_store
Eduardo

3
rake db:sessions:createअब मान्य नहीं है और रेल 4 में हटा दिया है, क्योंकि यह कई उपयोगकर्ताओं के साथ अनुप्रयोगों के लिए अच्छी तरह से स्केल नहीं करता है (बहुत अधिक डेटाबेस रीड और राईट)। रेल 4.0 देखें , रेक डीबी: सत्र: बनाएं

53

रेल 4 में डिफ़ॉल्ट रूप से कुकीज़ एन्क्रिप्टेड हैं

रेल 4 में, कुकीस्टोर कुकीज़ को एन्क्रिप्ट किया गया है और डिफ़ॉल्ट रूप से हस्ताक्षरित हैं:

यदि आपने केवल secret_tokenसेट किया है, तो आपकी कुकीज़ पर हस्ताक्षर किए जाएंगे, लेकिन एन्क्रिप्ट नहीं किए गए हैं। इसका मतलब है कि कोई उपयोगकर्ता user_idआपके ऐप की गुप्त कुंजी को जाने बिना उन्हें बदल नहीं सकता है , लेकिन आसानी से उन्हें पढ़ सकता है user_id। यह रेल 3 ऐप्स के लिए डिफ़ॉल्ट था।

यदि आपने secret_key_baseसेट किया है, तो आपकी कुकीज़ एन्क्रिप्ट की जाएंगी। यह हस्ताक्षरित कुकीज़ की तुलना में एक कदम आगे जाता है कि एन्क्रिप्टेड कुकीज़ को उपयोगकर्ताओं द्वारा बदला या पढ़ा नहीं जा सकता है। यह रेल 4 में शुरू होने वाला डिफ़ॉल्ट है।

यदि आपके पास दोनों हैं secret_tokenऔर secret_key_baseसेट किया गया है, तो आपकी कुकीज़ को एन्क्रिप्ट किया जाएगा, और रेल 3 द्वारा उत्पन्न कुकीज़ को पारदर्शी रूप से पढ़ा जाएगा और एक चिकनी अपग्रेड पथ प्रदान करने के लिए एन्क्रिप्ट किया जाएगा।

सक्रिय रिकॉर्ड सत्र स्टोर रेल 4 में पदावनत है

यह उत्तर अब आउट ऑफ़-डेट हैं।

  • rake db:sessions:create

  • rails generate session_migration

यह इस जवाब में बताया गया था । सक्रिय रिकॉर्ड सत्र संग्रह को हटाए जाने का कारण यह है कि डेटाबेस में पढ़ने / लिखने में तब कोई फ़र्क नहीं पड़ता जब आपके पास बड़ी संख्या में उपयोगकर्ता आपके एप्लिकेशन को एक्सेस कर रहे हों, जैसा कि इस ब्लॉग पोस्ट में कहा गया है :

... सक्रिय रिकॉर्ड सत्र स्टोर के साथ एक प्रमुख मुद्दा यह है कि यह स्केलेबल नहीं है। यह आपके डेटाबेस पर एक अनावश्यक भार डालता है। एक बार जब आपके एप्लिकेशन को बड़ी मात्रा में ट्रैफ़िक प्राप्त होता है, तो सत्र डेटाबेस तालिका को पढ़ने / लिखने के संचालन के साथ लगातार बमबारी की जाती है।

रेल 4 के रूप में, सक्रिय रिकॉर्ड सत्र स्टोर को कोर ढांचे से हटा दिया गया है और अब इसे हटा दिया गया है।

यदि आप अभी भी सक्रिय रिकॉर्ड सत्र स्टोर का उपयोग करना चाहते हैं, तो यह अभी भी एक रत्न के रूप में उपलब्ध है

वर्तमान रेल सत्र सर्वोत्तम आचरण

रूबी सत्रों के लिए रूबी के लिए अधिक वर्तमान सर्वोत्तम प्रथाओं के लिए, मैं सलाह देता हूं कि आप रूबी सुरक्षा गाइड पर रूबी के अंतिम संस्करणों की जांच करें ।


9

मेरा मानना ​​है कि किसी भी प्लेटफ़ॉर्म पर किसी को भी नहीं बदला है कि किसी भी प्लेटफ़ॉर्म पर कुकी आधारित सत्रों को कैसे संभालना चाहिए। सर्वर के नियंत्रण (कुकीज़, फॉर्म पोस्ट आदि) से परे गुजरने वाली किसी भी चीज पर संदेह करें। यह वेब विकास का एक सामान्य सिद्धांत है।

जहां तक ​​एन्क्रिप्शन की बात है, मुझे नहीं पता कि उस मोर्चे पर कुछ बदला है या नहीं।

कुकी स्टोर के साथ कुछ ध्यान रखने योग्य बात यह है कि डेटा की मात्रा की सीमा है, और यह कि यह डेटा हर अनुरोध पर तार पर भेजा जाएगा, जहां डेटाबेस स्टोर केवल आईडी को स्थानांतरित करता है और डेटा सर्वर पर रहता है ।


4

FWIW, रेल 3.1 चलाने का सुझाव देता है

rails generate session_migration

हालाँकि यह ठीक उसी माइग्रेशन को उत्पन्न करता है जैसे

rake db:sessions:create

एक ही नोट पर, रेक कार्य db:sessions:createअब session_migrationजनरेटर को सीधे आमंत्रित करता है। कार्य: create =>: वातावरण "टास्क अनुपलब्ध है इस डेटाबेस के लिए (कोई माइग्रेशन सपोर्ट नहीं)" जब तक ActiveRecord :: Base.connection.supports_migrations? आवश्यकता है 'रेल / जनरेटर' रेल :: Generators.configure! आवश्यकता है 'रेल / जेनरेटर / रेल / सेशन_मिशन / सेशन_मिशन_गेंसर' रेल्स :: जनरेटर्स :: SessionMigrationGenerator.start [ENV ["MIGRATION"] || "add_session_table"] अंत
तिरछा

rake db:sessions:createऔर rails generate session_migrationजनरेटर पदावनत कर रहे हैं और रेल 4 में हटा दिया है, क्योंकि वे बहुत से उपयोगकर्ताओं के साथ अनुप्रयोगों के लिए अच्छी तरह से बड़े पैमाने नहीं है (बहुत अधिक डेटाबेस रीड और राईट)। रेल 4.0 देखें , रेक डीबी: सत्र: बनाएं

2

रेल डिफॉल्ट मुझे बहुत अच्छा लगता है- कुकीस्टार तेज है और अधिकांश उपयोग मामलों को कवर करना चाहिए। सुनिश्चित करें कि आप 4kb तक सीमित हैं और आपका डेटा उपयोगकर्ता को दिखाई देगा, लेकिन रेल रास्ता केवल पूर्णांक आईडी और बुनियादी स्ट्रिंग मान जैसी चीजों के लिए सत्र का उपयोग करने के लिए है - यदि आप सत्र में ऑब्जेक्ट या अत्यधिक गोपनीय जानकारी संग्रहीत करने का प्रयास कर रहे हैं आप शायद गलत कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.