2011-02-16 13 views
16

मैं प्ले फ्रेमवर्क के साथ एक प्रमाणीकरण टोकन स्टोर करना चाहता हूं जो वर्तमान सत्र को संभवतः दिन या यहां तक ​​कि सप्ताहों तक पहुंचाता है - ताकि उपयोगकर्ताओं को हर बार लॉगिन करने की आवश्यकता न हो।मैं प्ले फ्रेमवर्क में कुकी कैसे स्टोर करूं?

ऐसा करने का अनुशंसित तरीका क्या है?

+1

कृपया उस प्रश्न को बंद करने के लिए उत्तर दें। यह दूसरों की भी मदद करेगा। धन्यवाद :) –

उत्तर

20

प्रतिक्रिया ऑब्जेक्ट एक विधि setcookie है, जो वास्तव में करता है कि आप क्या चाहते

response.setCookie("playlonglivecookie", yourData, "14d"); 

याद रखें, कि डेटा कुकी में संग्रहीत एन्क्रिप्टेड नहीं है, इसलिए यदि आप यह एन्क्रिप्ट करना चाहते हैं, तो Crypto.sign विधि का उपयोग करें। जो प्ले फ्रेमवर्क गुप्त कुंजी का उपयोग कर आपके कोड को इंगित करता है।

http://www.playframework.org/documentation/api/1.1.1/play/mvc/Http.Response.html#setCookie(java.lang.String,%20java.lang.String)

+0

यदि आप इसे अपने सभी सबडोमेन में साझा करना चाहते हैं तो आप कुकी कैसे स्टोर करेंगे? मैं ऐसा करने की कोशिश कर रहा हूं, लेकिन यह कुकी का उत्पादन नहीं कर रहा है: response.setCookie ("webLoggedIn", "true", "mydomain.org", "", 2592000, झूठी, झूठी); – HelpMeStackOverflowMyOnlyHope

0

प्रतिक्रिया-वस्तु में आपकी सहायता करने के कुछ तरीके हैं। javadoc देखें।

7

मैं आपको सलाह देता हूं कि आप play-1.x/मॉड्यूल/सुरक्षित और फ़ाइल Secure.java में प्रदान किए गए सुरक्षित मॉड्यूल पर नज़र डालें ... यह लॉगिन फ़ॉर्म में "मुझे याद रखें" चेकबॉक्स प्रदान करता है आपको अनंत काल के लिए लॉग इन रखने की अनुमति देता है।

और इस समारोह (विशेष रूप से अंत में response.setCookie) का कोड:

public static void authenticate(@Required String username, String password, boolean remember) throws Throwable { 
    // Check tokens 
    Boolean allowed = false; 
    try { 
     // This is the deprecated method name 
     allowed = (Boolean)Security.invoke("authentify", username, password); 
    } catch (UnsupportedOperationException e) { 
     // This is the official method name 
     allowed = (Boolean)Security.invoke("authenticate", username, password); 
    } 
    if(validation.hasErrors() || !allowed) { 
     flash.keep("url"); 
     flash.error("secure.error"); 
     params.flash(); 
     login(); 
    } 
    // Mark user as connected 
    session.put("username", username); 
    // Remember if needed 
    if(remember) { 
     response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d"); 
    } 
    // Redirect to the original URL (or /) 
    redirectToOriginalURL(); 
} 

पास्कल

1
खेलने के साथ

> 2.5 setcookie मान्य नहीं है।

आप के बजाय का उपयोग कर सकते हैं:

Http.Response.setCookie(Http.Cookie cookie) 

आप बिल्डर के साथ एक नया कुकी बना सकते हैं: https://www.playframework.com/documentation/2.5.x/api/java/play/mvc/Http.Response.html#setCookie-play.mvc.Http.Cookie-

:

Http.Cookie.builder("name", "value").withMaxAge(15).build(); 

15 दिनों समाप्ति की तारीख

संदर्भ है उदाहरण: https://github.com/playframework/playframework/blob/master/framework/src/play/src/test/java/play/mvc/CookieBuilderTest.java

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