2012-11-08 11 views
7

मैं उपयोगकर्ता नाम और सामान जैसी सत्र जानकारी रखने के लिए रेल पर रूबी में session[:hash_name] के साथ काम कर रहा हूं।बंद सत्र और रेल पर रूबी में लॉगिन करने के लिए रीडायरेक्ट

मैं इस सत्र को समाप्त करने का कोई तरीका ढूंढने का प्रयास कर रहा हूं, बिना उपयोगकर्ता को लॉग आउट करना है। विशेष रूप से दो मामलों में: कुछ समय बाद इसे समाप्त होने की आवश्यकता होती है और जब उपयोगकर्ता ब्राउज़र बंद कर देता है।

अब तक मुझे another पैरामीटर मिला है जिसे cookies[:hash_name] कहा जाता है जो कुछ समय बाद समाप्त हो सकता है। लेकिन मुझे यकीन नहीं है कि प्रत्येक उपयोगकर्ता अनुरोध में इस पैरामीटर को कैसे जांचें और फिर reset_session को कॉल करें। जब सत्र रीसेट हो जाता है तो मुझे उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट करने की आवश्यकता होती है।

इन 2 समस्याओं को हल करने के लिए कोई सुझाव बहुत सराहना की जाती है।

उत्तर

5

आप एक कुकी, जो डिफ़ॉल्ट रूप से एक सत्र कुकी (अर्थात यह गायब हो जाता है जब उपयोगकर्ता ब्राउज़र बंद कर देता है) में सत्र की दुकान, और :expire_after का उपयोग कर एक समय समाप्ति जोड़ सकते हैं।

इसे config/initializers/session_store.rb में कॉन्फ़िगर किया जा सकता है। उदाहरण के लिए:

Yourapp::Application.config.session_store :cookie_store, 
             key: 'your_session_id', 
             expire_after: 45.minutes 
1

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

मैं प्रमाणीकरण के लिए तैयार करने का अत्यधिक अनुशंसा करता हूं। तैयार करने के साथ आपको sign_out(current_user) जैसी विधियां मिलती हैं, जो स्पष्ट रूप से अनुरोध करने वाले उपयोगकर्ता को इंगित करती हैं। devise's github page

सभी यह gem install devise है लेता है, अपने gemfile में जोड़ने, और फिर

rails g devise:install User # or whatever model name

चलाने पर एक नजर डालें और वे संभाल बाकी

+0

धन्यवाद, मैं तैयार करने का विकल्प तलाशूंगा, लेकिन अभी मुझे एक साधारण सत्र नियंत्रक की आवश्यकता है जो कुछ समय बाद समाप्त हो जाती है। उत्तर जिसे मैंने "ओल्ड प्रो" द्वारा प्राप्त किया – marimaf

0

मुझे लगता है कि आप अपने स्वयं के कस्टम प्रयोग कर रहे हैं प्रमाणन विधि। तो, scenario1 के लिए (यानी कुछ समय के बाद सत्र समाप्त हो रही), तो आपको दिए गए के समान कुछ कर सकते हैं नीचे:

def create_session 
    if session[:hash_key] 
    destroy_session if session[:last_login] < 10.minutes.ago 
    session[:last_login] = Time.now 
    else 
    ... authenticate 
    session[:last_login] = Time.now 
    end 
end 

def destroy_session 
    reset_session 
end 

scenario2 (यानी ब्राउज़र पास पर), आप उपयोग jQuery ईवेंट हैंडलर कॉल कर सकते हैं और इस तरह कुछ कर सकते हैं के लिए नीचे:

$('window').unload(function(){ 
    //call to destroy session method 
});