2010-04-24 13 views
5

मैं एक वेब ऐप लागू कर रहा हूं, जो सत्रों का उपयोग करता है। मैं अपने क्लाइंट/सर्वर के रूप में जीडब्ल्यूटी और ऐप इंजन का उपयोग कर रहा हूं, लेकिन मुझे नहीं लगता कि वे PHP और अपाचे आदि के साथ कुछ भी अलग कर रहे हैं।आप सत्र कुकीज़ को कब तक रखते हैं?

जब कोई उपयोगकर्ता मेरे वेब ऐप में लॉग इन करता है, मैं उनके लिए एक सत्र शुरू करने के लिए HttpSession का उपयोग कर रहा हूँ। मैं इस तरह सत्र id मिलती है:

// From my login servlet: 
getThreadLocalRequest().getSession(false).getId(); 

मैं ग्राहक को वापस sessionId लौटने के लिए, और वे एक कुकी में संग्रहीत। ट्यूटोरियल मैं 'की समय सीमा समाप्त' करने के लिए इस कुकी समूह उपयोग कर रहा हूँ दो सप्ताह में:

Cookie.write("sid", theSessionId, 1000 * 60 * 60 * 24 * 14); // two weeks 

यहाँ है जहाँ मैं उलझन में हूँ: कुकी दो सप्ताह में समाप्त हो रहा है, तो मेरे उपयोगकर्ता webapp खुशी का उपयोग कर के साथ जाना होगा, केवल एक दिन में मेरी साइट पर ब्राउज़ करें और लॉगिन स्क्रीन दिखाएं। मेरे विकल्प क्या हैं? क्या मैं इस कुकी के लिए अभी कोई समाप्ति समय निर्धारित नहीं कर सकता? इस तरह उपयोगकर्ता को स्पष्ट रूप से लॉग आउट करना होगा, अन्यथा वे वापस लॉग इन किए बिना हमेशा ऐप का उपयोग कर सकते हैं?

या ऐसा करने का कोई बेहतर तरीका है? मुझे ट्विटर जैसी साइटों को याद नहीं किया जा रहा है, जिन्होंने कभी मुझे फिर से लॉग इन करने के लिए कहा है। मुझे स्थायी रूप से लॉग इन होना प्रतीत होता है। क्या वे अभी कोई समाप्ति नहीं करते हैं?

वेबपैप किसी भी प्रकार के अत्यधिक संवेदनशील डेटा की रक्षा नहीं कर रहा है, इसलिए मुझे कोई कुकी छोड़ने पर कोई फर्क नहीं पड़ता है, लेकिन ऐसा लगता है कि एक बेहतर तरीका होना चाहिए?

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

धन्यवाद

+1

आमतौर पर, मैंने देखा है कि बहुत सारे वेब ऐप्स आपको "मुझे लॉग इन रखें" के लिए टिकने की अनुमति देते हैं, जो आपको अनिश्चित काल तक लॉग इन करता है, या यदि ब्राउज़र बंद होने के बाद आपको अनचाहे लॉग आउट किया गया है। – Corey

उत्तर

3

HttpSession दृश्यों को पहले से ही एक कुकी द्वारा समर्थित पीछे है:

इस ट्यूटोरियल मैं संदर्भित कर रहा हूँ है। jsessionid नाम वाले ब्राउज़र के लिए ब्राउज़र कुकी सूची देखें। इसके अलावा, एक उदाहरण प्राप्त करते समय, आपको getSession() पर false के बिना कॉल करना चाहिए, अन्यथा आपको NullPointerException का जोखिम हो सकता है जब यह अभी तक नहीं बनाया गया है और इस प्रकार null वापस आ जाएगा।

जब आप लॉगिन करते हैं, तो आप आम तौर पर सत्र में User में लॉग इन करते हैं।

User user = userDAO.find(username, password); 
if (user != null) { 
    session.setAttribute("user", user); 
} else { 
    // Handle error "Unknown username/password combo." 
} 

तुम बस सत्र में अपनी उपस्थिति की जाँच करके User में लॉग इन पर अपने WebApplication अवरोधन दे सकते हैं। उदाहरण के लिए Filter में जो आप सुरक्षित पृष्ठों को अवरोधित करने के लिए उपयोग करना चाहते हैं।

if (session.getAttribute("user") == null) { 
    response.sendRedirect("login"); 
} else { 
    chain.doFilter(request, response); 
} 

HttpSession 30 मिनट के एक डिफ़ॉल्ट टाइमआउट सबसे webcontainers में है। दूसरे शब्दों में, यह अंतिम अनुरोध के 30 मिनट बाद समाप्त हो जाएगा। यह web.xml में configureable इस प्रकार है:

<session-config> 
    <session-timeout>10</session-timeout> 
</session-config> 

कहाँ टाइमआउट मिनट (इस प्रकार ऊपर के उदाहरण में 10 मिनट) में है।

आप एक (स्वचालित) "मुझे इस कम्प्यूटर पर याद रखें" विकल्प प्रदान करना चाहते हैं, तो आप एक और पहचानकर्ता के साथ एक और कुकी बनाना है।मैंने पहले एक उत्तर पोस्ट किया है जो इसके बारे में विस्तार से है: Java - How do I keep a user logged into my site for months?

+0

ठीक है तो मुझे वास्तव में इसका समर्थन करने के लिए कुछ भी क्लाइंट-साइड करने की ज़रूरत नहीं है? मैंने ऐप-इंजन और कार्यों पर परीक्षण किया, लेकिन ब्राउज़र बंद करने के बाद सत्र को बनाए रखा नहीं गया है, भले ही मैं web.xml में एक स्पष्ट सत्र-टाइमआउट अवधि डालूं। मुझे लगता है कि इससे कोई फर्क नहीं पड़ता क्योंकि दूसरे भाग 'उपयोगकर्ता को महीनों के लिए मेरी साइट में लॉग इन रखने' को कवर करना चाहिए? धन्यवाद – user246114

+0

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

+1

ठीक है जो समझ में आता है - लेकिन फिर मैं उलझन में हूं कि आप अपने अन्य प्रश्न के उत्तर में तत्काल स्वचालित लॉगिन कैसे कर सकते हैं? जब उपयोगकर्ता अपने ब्राउज़र को पुनरारंभ करता है, तो jsessionid शुद्ध हो जाता है। तो अगली पुनरारंभ पर, ब्राउज़र www.mysite.com पर जायेगा और * नहीं * देखें कि यह jsessionid है। इसलिए सर्वर पृष्ठ की सेवा करेगा जैसे उपयोगकर्ता * प्रमाणीकृत नहीं है। इसके लिए क्लाइंट को अब सर्वर पर एक यात्रा करने की आवश्यकता होगी ताकि यह बताने के लिए कि उपयोगकर्ता वास्तव में प्रमाणीकृत है। क्या ब्राउज़र के लिए पहली प्रस्तुति पर अपनी कुकी भेजने का कोई तरीका नहीं है? मूल क्यू संपादित में विस्तृत होगा, धन्यवाद! – user246114

संबंधित मुद्दे