2014-04-25 9 views
8

मैं जानना चाहता हूं कि उपयोगकर्ता का सत्र सर्वर की ओर समाप्त हो गया है और ऐसा होने पर कुछ निष्पादित करता है। मैं यह कैसे करु?मैं प्ले फ्रेमवर्क में सत्र टाइमआउट या समाप्ति कैसे संभाल सकता हूं?

मैं जावा और प्ले फ्रेमवर्क 2.2.1 का उपयोग कर रहा हूं।

+0

जांच इस http: //www.poornerd.com/2014/04/01/how-to-implement-a-session-timeout-in-play-framework-2/ – immutable

उत्तर

11

प्रत्येक प्रमाणीकृत अनुरोध पर Play's built-in authentication का उपयोग करते समय, अद्यतन समाप्ति के साथ सत्र में टाइमस्टैम्प स्टोर करें।

फिर, प्रमाणीकरणकर्ता में, सत्र समाप्ति को मान्य करें।

लेख How to implement a Session Timeout in Play Framework 2 इस उदाहरण प्रदान करता है:

public class Secured extends Security.Authenticator { 

    public static final String UNAUTHENTICATED = "unauthenticated"; 

    public static User getLoggedInUser() { 
     if (session("userId") == null) 
      return null; 
     return User.findById(Long.parseLong(session("userId"))); 
    } 

    public static String getLoggedInUsername() { 
     if (session("userId") == null) 
      return null; 
     return User.findById(Long.parseLong(session("userId"))).getUsername(); 
    } 


    @Override 
    public String getUsername(Http.Context ctx) { 

     // see if user is logged in 
     if (session("userId") == null) 
      return null; 

     // see if the session is expired 
     String previousTick = session("userTime"); 
     if (previousTick != null && !previousTick.equals("")) { 
      long previousT = Long.valueOf(previousTick); 
      long currentT = new Date().getTime(); 
      long timeout = Long.valueOf(Play.application().configuration().getString("sessionTimeout")) * 1000 * 60; 
      if ((currentT - previousT) > timeout) { 
       // session expired 
       session().clear(); 
       return null; 
      } 
     } 

     // update time in session 
     String tickString = Long.toString(new Date().getTime()); 
     session("userTime", tickString); 

     return User.findById(Long.parseLong(session("userId"))).getUsername(); 
    } 
} 

इस आवेदन के विन्यास फाइल (application.conf) में ही मिनटों में एक sessionTimeout मूल्य की आवश्यकता है।

+0

देर से उत्तर के लिए खेद है, मैं इस ASAP पर वापस आऊंगा और देख सकता हूं कि यह काम करता है या नहीं। बहुत सराहना की। – supertonsky

+0

मैं 'ctx.session() का उपयोग करने का सुझाव दूंगा। (" UserTime ", टिकस्ट्रिंग) को प्रतिस्थापित करें;' 'getUsername' के शरीर में – malloc4k

+0

'सत्र (स्ट्रिंग)' में कौन सा पैकेज है? –

0

सत्र टाइमआउट

  • सत्र टाइमआउट विन्यास आइटम, session.maxAge, एक पूर्णांक, सेकंड में होने के लिए परिभाषित किया हुआ करता था। अब यह एक अवधि है, इसलिए 1h या 30m जैसे मानों के साथ निर्दिष्ट किया जा सकता है। दुर्भाग्यवश, यदि कोई इकाई इकाई निर्दिष्ट नहीं है तो डिफ़ॉल्ट इकाई मिलीसेकंड है, जिसका अर्थ है कि 3600 का कॉन्फ़िगरेशन मान पहले एक घंटे के रूप में माना जाता था, लेकिन अब इसे 3.6 सेकंड के रूप में माना जाता है। एक समय इकाई जोड़ने के लिए आपको अपनी कॉन्फ़िगरेशन को अपडेट करने की आवश्यकता होगी।

See here

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