2010-09-06 10 views
6

मैं एक इंस्टेंस ऑब्जेक्ट फ़ोरैच उपयोगकर्ता सत्र कैसे संग्रहीत कर सकता हूं?प्लेफ्रेमवर्क में ऑब्जेक्ट सत्र

मेरे पास एक जटिल एल्गोरिदम मॉडलिंग करने के लिए एक कक्षा है। यह एल्गोरिदम चरण-दर-चरण चलाने के लिए डिज़ाइन किया गया है। मुझे प्रत्येक उपयोगकर्ता के लिए इस कक्षा की वस्तुओं को तुरंत चालू करने की आवश्यकता है। प्रत्येक उपयोगकर्ता अपने उदाहरण के चरणबद्ध कदम आगे बढ़ने में सक्षम होना चाहिए।

+0

आपका प्रश्न वास्तव में स्पष्ट नहीं है। यदि आप उल्लेख करते हैं कि आप क्या करने की कोशिश कर रहे हैं तो इससे मदद मिलेगी। –

+0

सोरी, मेरी अंग्रेजी बहुत खराब है। अब मैं संपादित करता हूं ... – barroco

उत्तर

6

आप केवल कैश में वस्तुओं स्टोर कर सकते हैं साफ़ करें। वस्तुओं के लिए serializable होना चाहिए। सत्र में आप कैश में एक कुंजी (जो एक स्ट्रिंग होना चाहिए) स्टोर कर सकते हैं। सुनिश्चित करें कि आपका कोड अभी भी काम करता है यदि ऑब्जेक्ट को कैश से हटा दिया गया था (सत्र-टाइमआउट के समान)। यह http://www.playframework.org/documentation/1.0.3/cache में समझाया गया है। आशा है कि आपकी समस्या का समाधान करें।

+0

क्या आप मुझे एक उदाहरण उदाहरण दे सकते हैं ?, बहुत धन्यवाद – barroco

+1

क्षमा करें मैं नहीं देख सकता कि मैं एक उदाहरण में क्या दिखा सकता हूं जिसे संदर्भित नहीं किया गया है प्रलेखन। – niels

4

सत्र में मान संग्रहीत करने के लिए:

//first get the user's session 
//if your class extends play.mvc.Controller you can access directly to the session object 
Session session = Scope.Session.current(); 
//to store values into the session 
session.put("name", object); 

आप रद्द करना चाहते हैं/सत्र वस्तु

session.clear() 
+2

लेकिन 'ऑब्जेक्ट' एक 'स्ट्रिंग' होना चाहिए, है ना? – barroco

+1

ओह हाँ, ऑब्जेक्ट एक स्ट्रिंग – plunchete

+2

होना चाहिए, तो मेरा समाधान नहीं है – barroco

0
खेलने प्रलेखन से

: http://www.playframework.org/documentation/1.1.1/cache

Play has a cache library and will use Memcached when used in a distributed environment. 

If you don’t configure Memcached, Play will use a standalone cache that stores data in the JVM heap. Caching data in the JVM application breaks the “share nothing” assumption made by Play: you can’t run your application on several servers, and expect the application to behave consistently. Each application instance will have a different copy of the data. 

आप दस्तावेज़ http://www.playframework.org/documentation/1.1.1/controllers#session से (कैश में किसी भी वस्तु डाल सकते हैं इस उदाहरण में निम्न उदाहरण में, आप session.getId() का उपयोग करने के लिए संदेशों को बचाने के लिए प्रत्येक उपयोगकर्ता)

public static void index() { 
    List messages = Cache.get(session.getId() + "-messages", List.class); 
    if(messages == null) { 
     // Cache miss 
     messages = Message.findByUser(session.get("user")); 
     Cache.set(session.getId() + "-messages", messages, "30mn"); 
    } 
    render(messages); 
} 

क्योंकि यह एक कैश, और नहीं एक सत्र है, तो आप को ध्यान में रखना है कि डेटा अब उपलब्ध नहीं हो सकता है, और (संदेश मॉडल कुछ somehere से एक बार फिर से इसे पुनः प्राप्त करने का मतलब यह होता है , इस मामले में)

वैसे भी, यदि आपके पास पर्याप्त मेमोरी है और इसमें उपयोगकर्ता के साथ एक छोटी सी बातचीत शामिल है, तो डेटा वहां होना चाहिए, और यदि ऐसा नहीं है तो आप उपयोगकर्ता को विज़ार्ड की शुरुआत में रीडायरेक्ट कर सकते हैं (आप किसी प्रकार के बारे में बात कर रहे हैं विज़ार्ड पेज, है ना?)

ध्यान रखें कि इसके स्टेटलेस शेयर-कुछ भी दृष्टिकोण के साथ, वास्तव में कोई सैसीओन नहीं है, इसके नीचे इसे केवल कुकीज़ के माध्यम से संभालता है, यही कारण है कि यह केवल सीमित आकार

के तारों को स्वीकार कर सकता है
+0

ठीक है !, धन्यवाद। लेकिन मैं अपने application.conf फ़ाइल में 'memcached = enable' और' memcached.host = 127.0.0.1: 11211' को अपूर्ण करता हूं और काम नहीं करता हूं। मुझे यह त्रुटि मिलती है: "त्रुटि: सर्वर त्रुटि सर्वर को कोई त्रुटि आई और आपका अनुरोध पूरा नहीं हो सका। यदि समस्या बनी रहती है, तो कृपया अपनी समस्या की रिपोर्ट करें और इस त्रुटि संदेश और क्वेरी के कारण इसका उल्लेख करें।" – barroco

+0

मैं सलाह देता हूं कि आप नाटक के Google समूह से पूछें, वे बहुत ही संवेदनशील हैं ... http://groups.google।कॉम/ग्रुप/प्ले-फ्रेमवर्क – opensas

+0

मुझे memcaches के साथ कोई अनुभव नहीं है, लेकिन यह स्थानीयहोस्ट पर सुनना प्रतीत होता है: 11211, यह एक सेवा है, इसे स्थापित और चलाना चाहिए ... – opensas

0

यहां एक सत्र में आप "ऑब्जेक्ट्स" को कैसे सहेज सकते हैं। असल में, आप जेएसओएन को ऑब्जेक्ट्स को क्रमबद्ध/deserialize और इसे कुकी में स्टोर करें।

https://stackoverflow.com/a/12032315/82976

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