2013-02-23 112 views
5

में स्वचालित लॉगइन करने के लिए मुझे पता है वहाँ पहले से ही इस पर सवाल का एक बहुत है, लेकिन मैं अभी भी एक निश्चित जवाब खोजने के लिए नहीं मालूम था। मैं जो करना चाहता हूं उसे उपयोगकर्ताओं को 2 सप्ताह या जब तक लॉग आउट नहीं किया जाता है, तब तक याद किया जाता है। नीचे जो मुझे लगता है वह हो रहा है और मैं सोच रहा था कि अगर थोड़ा और अनुभव वाला कोई व्यक्ति मुझे बता सकता है कि मैं सही हूं या गलत हूं।सत्र और कुकीज़ GWT

उपयोगकर्ता पहली बार के लिए लॉग करता है। सर्वर पर एक आरपीसी कॉल 'UserInfo' ऑब्जेक्ट देता है जिसमें इसके साथ एक नया sessionID शामिल होता है। उर्फ सर्वर पर ऐसा होता है और user दिया जाता है:

user.setSessionId(getThreadLocalRequest().getSession().getId());

अब के बाद user दिया जाता है हम ग्राहक के पक्ष डाटा स्टोर करने कुकीज़ बनाना होगा। मैं सही हूँ कह हम एक कुकी की जरूरत है वर्तमान उपयोगकर्ता और एक अन्य sessionID के लिए पहचान करने के लिए:

final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login - 2 weeks 
Date expires = new Date(System.currentTimeMillis() + DURATION); 

String sessionID = user.getSessionId(); 
String username = user.getUsername(); 
Cookies.setCookie("sessionID", sessionID, expires, null, "/", false); 
Cookies.setCookie("username", username, expires, null, "/", false); 

अब जब उपयोगकर्ता एक बाद की तारीख में वापस एप्लिकेशन की बात आती है कि हम कुकी की जाँच करें और (बशर्ते कि वे मौजूद है और जैसे किसी कारण से नष्ट कर दिया नहीं किया गया है एक स्पष्ट उपयोगकर्ता से लॉग आउट) सर्वर से आरपीसी के माध्यम से सत्र वैधता की जांच करने उनके मानों का उपयोग:

String sessionID = Cookies.getCookie("sessionID"); 
String username = Cookies.getCookie("username"); 

    if (sessionID != null && username != null){ 
     AsyncCallback<UserInfo> callBack = new AsyncCallback<UserInfo>(){ 

      @Override 
      public void onFailure(Throwable caught) { 

       Window.alert("Error connecting to server."); 


      } 

      @Override 
      public void onSuccess(Boolean sessionValid) { 

       if (sessionValid) 
        loadInitialInterfaceForUser("username"); 
       else 
        loadLoginInterface(); 
      } 

     }; 

    loginSvc.checkSessionValidity(sessionID,username, callBack); 
    } 

    else 
     loadLoginInterface(); 

अब, यह सोचते हैं मैं अब तक क्या किया है सही है (जो एक लंबा शॉट का थोड़ा सा है: पी) मेरा असली सवाल यह है कि मुझे सर्वर की तरफ checkSessionValidity(sessionID,username) पर क्या देखना चाहिए?

क्या यह उपयोगकर्ता को लाने का मामला है कि मैंने सर्वरसाइड को संग्रहीत किया है और sessionID की तुलना sessionID के साथ किया है, मैंने उपयोगकर्ता से जुड़ा है? क्या मैं यह भी जांचता हूं कि यह समाप्त नहीं हुआ है?

मैं जानता हूँ कि यह एक longwinded और शायद नहीं बहुत अच्छी तरह से शब्दों में सवाल यह है कि ... मैं इसे दौर मेरे सिर पाने के लिए संघर्ष कर रहा हूँ इसलिए किसी भी और सभी मदद बहुत स्वागत है!

चीयर्स, स्टीव

उत्तर

4

हाँ, ऐसा करने के लिए एक महत्वपूर्ण बात है।

यहाँ (DB में भंडारण सत्र आईडी और उपयोगकर्ता नाम) उस पर चर्चा की कुछ दिलचस्प बात

इस पर एक नज़र है
how to check if a sessionId is valid in a servlet (java) (बिल्कुल आप उन्हें impl class बजाय servlet में जाँच कर सकते हैं)।

और यहाँ GWT

में सत्र प्रबंधन का एक उत्कृष्ट उदाहरण

http://varuntayur.wordpress.com/2012/01/25/session-management-in-gwt

इस पढ़ें भी question on GWT, Cookies and webpage directing

+0

अरे यार धन्यवाद, उदाहरण चीज़ें थोड़ी साफ कर दिया है! एक बात मैं सोच रहा था जब उपयोगकर्ता लॉग आउट वह सत्र से उपयोगकर्ता निकाल देता है लेकिन sessionID कि उपयोगकर्ता के साथ डीबी में संग्रहीत किया जाता अमान्य नहीं है उदाहरण में है,? क्या यह भी नहीं किया जाना चाहिए? – SteveCallender

+1

देखें कि आप दो उदाहरणों को मिश्रित कर रहे हैं, या तो आपको सत्र में बनाए रखना होगा या डीबी में सत्र आईडी को स्टोर करना होगा। दोनों की जरूरत नहीं है। –

+0

आह ठीक है मैं देखता हूँ। इसलिए बशर्ते मैंने जांच की कि डीबी में संग्रहीत सत्र आईडी के खिलाफ कुकी में संग्रहीत सत्र आईडी को सत्र चर बनाए रखना नहीं है? – SteveCallender

0

नीचे दिए गए लिंक पर एक नजर डालें है।

Cannot use same cookie for multiple GWT applications

यह आपकी समस्या का समाधान हो सकता है। प्रतिक्रिया के लिए बहुत बहुत