रेल सत्र को खाली कैसे करें / नष्ट करें?


133

मुझे यह कहीं भी नहीं मिल रहा है ... मैं किसी उपयोगकर्ता के सत्र को रेल में कैसे हटा / नष्ट / रीसेट / खाली / खाली कर सकता हूं? सिर्फ एक मूल्य नहीं बल्कि पूरी चीज ..

जवाबों:


203

पूरी बात को साफ करने के लिए एक नियंत्रक में reset_session विधि का उपयोग करें।

reset_session

यहाँ इस पद्धति पर प्रलेखन है: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

सत्र के भीतर संग्रहीत सभी वस्तुओं को साफ़ करके और एक नए सत्र ऑब्जेक्ट को आरम्भ करके सत्र को रीसेट करता है।

सौभाग्य!


1
डेटाबेस-आधारित सत्रों के लिए (जो आपको संभवतः उपयोग करना चाहिए) आप एक क्वेरी के माध्यम से समाप्त कर सकते हैं: guide.rubyonrails.org/security.html#session-expiry
m33lky

44

रेल में सत्र एक हैश वस्तु है। इसलिए हैश साफ़ करने के लिए उपलब्ध कोई भी कार्य सत्रों के साथ काम करेगा।

session.clear

या यदि विशिष्ट कुंजियों को नष्ट करना है:

session.delete(key)

रेल में परीक्षण 3.2

जोड़ा

लोगों ने उल्लेख किया session={}है कि यह एक बुरा विचार है। session.clearलोबाती टिप्पणियों के बारे में , ऐसा लगता है कि आप reset_session [session.clear] की तुलना में बेहतर कर रहे हैं, क्योंकि यह कुछ और सफाई करता है जो कि session.clear से परे है। आंतरिक रूप से, reset_session session.destroy कॉल करता है , जो खुद को स्पष्ट और साथ ही कुछ अन्य सामान भी कहता है।


किसी को भी इस विधि के गुणों पर कोई विचार है?
पीटर बर्ग

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

1
यह सत्र को बिल्कुल भी रीसेट नहीं करेगा, यह एक स्थानीय चर प्रदान करेगा। सत्र रीसेट करने के लिए कभी भी इस तकनीक का उपयोग न करें: सत्र = {}
एलेक्सपेलर

4
रेल प्रलेखन , खंड पर 5.1 सत्र को एक्सेस करना और एक नया सत्र उत्पन्न: यदि आप निकालें पटकथा डाला कुंजी / मान जोड़े (कुछ एक नियंत्रक से डाला पूर्व) चाहते reset_session उपयोग करने के लिए सिफारिश की। यदि आप केवल कुंजी / मान जोड़े को रीसेट करना चाहते हैं, तो उन कुंजियों को शून्य पर सेट करें।
सरगास

1
@barlop ऐसा लगता है कि आप शायद इस्तेमाल करने से बेहतर हैं reset_session, क्योंकि यह कुछ और सफाई session.clearकरता है। आंतरिक रूप से, reset_sessionकॉलsession.destroy , जो खुद कॉल clearकरता है और साथ ही कुछ अन्य सामान भी
लोबाती

6

उपयोगकर्ता के सत्र को हटाने के लिए

session.delete(:user_id)

सावधान, आप डेटाबेस से उपयोगकर्ता रिकॉर्ड को हटा सकते हैं!
आर्थर

2
@ आर्थर यह सच नहीं है। लेकिन आप केवल सत्र: पूरे सत्र से user_id कुंजी नहीं हटाएंगे
Andión

5

केवल कुछ मापदंडों को साफ़ करने के लिए, आप उपयोग कर सकते हैं:

[:param1, :param2, :param3].each { |k| session.delete(k) }

2

इस कोड को अपने ApplicationController में जोड़ें

def reset_session
  @_request.reset_session
end

(पता नहीं क्यों ऊपर कोई भी इस कोड का उल्लेख नहीं करता है क्योंकि यह मेरी समस्या तय करता है) http://apidock.com/rails/ActionController/RackDelegation/reset_session


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