2009-08-07 14 views
11

में कुकी-आधारित सत्र स्टोर को साफ़ करने के लिए कमांड मैं अक्सर रेल में सत्र स्टोर को साफ़ करना चाहता हूं, विशेष रूप से, डिफ़ॉल्ट कुकी-आधारित सत्र स्टोर। कुछ साइटें सुझाव देती हैं किरेल

rake tmp:sessions:clear 

इस कार्य को पूरा करता है, लेकिन ऐसा लगता है कि ऐसा नहीं होता है। कुकी-आधारित सत्र स्टोर को साफ़ करने का सही तरीका क्या है?

उत्तर

8

समस्या यह है कि कुकीज़ क्लाइंट पक्ष हैं। आपके सर्वर पर एक रेक कार्य चलाने से वेब पेज पर आने वाली सभी मशीनों पर कुकीज़ को हटाया नहीं जाएगा, जाहिर है।

शायद आप अपने नियंत्रकों में session.clear का उपयोग कर सकते हैं? हालांकि, आप कुकी कुंजी को बदलने के बारे में सही हैं। ऐसा करने से पुरानी कुंजी से संबंधित किसी भी सत्र को अमान्य कर दिया जाएगा। आपको ActionController::StaleSession (या ऐसा कुछ) से बचाव करना होगा, लेकिन यह काम करेगा।

+2

ठीक है, जैसा कि मैंने अपनी टिप्पणी में बताया है, मैं गलत धारणा के तहत था कि कुकी केवल क्लाइंट और सर्वर के बीच कुछ प्रकार के सत्र टोकन रखती है और या तो टोकन सर्वर-साइड को भी सत्यापित करने के लिए सर्वर-साइड पर संग्रहीत किया जाता है क्लाइंट का टोकन या डेटा सर्वर-साइड पर है। अस्थायी रूप से मेरे पास सत्र को अनदेखा करने के लिए मेरे कोड में एक समाधान है। शायद सबसे आसान बात यह है कि विकास पर्यावरण के लिए डेटाबेस समर्थित बैक स्टोर में स्विच करना है (मैं केवल विकास उद्देश्यों के लिए सत्र साफ़ करना चाहता हूं)। – user85509

3

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

यदि यह सत्य है, तो कुकीज को साफ़ करने का एकमात्र तरीका साइन-इन करने के लिए उपयोग किए जाने वाले सर्वर-साइड कुकी रहस्य को बदलना होगा और फिर सर्वर प्रक्रिया को संभवतः पुनरारंभ करना होगा।

+0

config.secret_token बदल गया और सर्वर को पुनरारंभ किया। कुकी सत्र रीसेट कर दिए गए थे। परिणाम। – patrickmcgraw

9

सत्र कुकी का नाम बदलें। यह पुरानी कुकीज़ को हटा नहीं देगा, लेकिन यह सभी को एक नया सत्र कुकी प्राप्त करने के लिए मजबूर करेगा।

24

आप कुकी आधारित सत्र

का उपयोग करते हैं आप अपने रेल app की secret_token बदल सकते हैं। यह सभी मौजूदा सत्रों को अमान्य कर देगा।

rake secret 

फिर

RAILS_ROOT/config/initializers/session_store.rb 

यह Thats करने के लिए मान की प्रतिलिपि। इस के बाद आपके ऐप को पुनः आरंभ करने याद है;)

आप फ़ाइल आधारित सत्रों

rake tmp:sessions:clear 
+4

मुझे मूल्य को secret_token.rb पर कॉपी करना पड़ा –

1

आप एक पर इस चला रहे हैं का उपयोग करते हैं आप डेटाबेस आधारित सत्र

rake db:sessions:clear 

का उपयोग करते हैं उत्पादन सर्वर मैं अनुशंसा करता हूं:

rake secret 

जो कि एक यादृच्छिक सुरक्षित टोकन उत्पन्न कर रहा है। रेक कार्य मूल रूप से ऐसा कर रहा है, जिसे आप कंसोल में कर सकते हैं।

SecureRandom.hex(64) 

कभी भी संस्करण नियंत्रण/जीआईटी में उत्पादन कुंजी की जांच न करें बल्कि इसके बजाय एक पर्यावरण चर का उपयोग करें।तो आपकी config/secrets.yml फ़ाइल में कुछ ऐसा उपयोग करें:

production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>