2009-10-30 16 views
11

में सत्र स्टोर करने के लिए कुकीज़ का उपयोग करना कुकी में पूरे सत्र को स्टोर करना पिछले कुछ सालों से रेल में मानक रहा है - क्या एएसपी एमवीसी के समान कुछ हासिल करने का कोई आसान तरीका है?एएसपी एमवीसी

डिफ़ॉल्ट रूप से, सत्र/TempData में कुछ भी सर्वर पर स्मृति में संग्रहीत किया जाता है। Web.config में इसे एक एसक्यूएल स्टोर/सर्वर-साइड कैश में बदला जा सकता है। मैं इन वस्तुओं को एक कुकी में बनाए रखने में सक्षम होना चाहता हूं।

ऐसा लगता है कि मैं एक कस्टम सत्र-राज्य स्टोर प्रदाता को कार्यान्वित कर सकता हूं। क्या कोई आसान दृष्टिकोण है?

+1

क्या आपका मतलब 'कुकी में पूरा सत्र' टाइप करना था? – codeulike

+0

हाँ - धन्यवाद –

उत्तर

4

हाँ, custom state session-provider लागू करें। और नहीं, afaik एक आसान दृष्टिकोण नहीं है।

Ps। यह उतना बुरा नहीं है जितना दिखता है i.e.>odbc sample का आधा डीबी को लिख रहा है।

+0

इस पर अनुवर्ती, मैंने एक कस्टम स्टेट सत्र-प्रदाता लागू किया और यह वास्तव में सीधा था। सहायता के लिए धन्यवाद। –

-2

डेटा की किस तरह तुम सिर्फ दुकान स्ट्रिंग के लिए कुकी में स्टोर करने के लिए, अगर आप चाहते हैं चाहते हैं पर निर्भर करता है, निम्नलिखित कोड क्या करेंगे:

HttpCookie cookie = new HttpCookie("username","sth"); 
      cookie.HttpOnly = true; 
      cookie.Expires = DateTime.Now.AddMonths(3); 
      HttpContext.Current.Response.Cookies.Add(cookie); 
-1

आप इस के लिए सत्र का उपयोग नहीं करना चाहिए, लेकिन प्रोफाइल बजाय। प्रोफ़ाइल कंप्यूटर से प्रोफाइल आदि से मिलान करने के लिए कुकीज़ का उपयोग करते हैं। प्रोफाइल कुंजी कुकी में संग्रहीत होती है, और ब्राउजर बंद करते समय खो नहीं जाती है।

यहां जानकारी; http://odetocode.com/articles/440.aspx

2

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

यहाँ एक उदाहरण है:

GET/HTTP/1.1 
Host: localhost 
OtherUsefulHeaders: foo 
Cookie: YourSessionState=... 

प्रारंभिक अनुरोध आकार लगभग 200 बाइट है। मान लीजिए, आप अपने सत्र में लगभग 100 बाइट जोड़ते हैं। अब आकार 300 बाइट्स है और ओवरहेड ~ 30% है। आप एक और 100 बाइट जोड़ते हैं, और ओवरहेड 50% है। जिसका अर्थ यह है कि अनुरोध और 2x बैंडविड्थ भेजने के लिए लगभग 2x समय की आवश्यकता होती है।

आपको cookie-based TempData implementation में देखना चाहिए क्योंकि इसमें बहुत छोटा पदचिह्न है और वास्तव में समझ में आता है।

+1

TempData (कुकी स्टोर के माध्यम से कार्यान्वित) के माध्यम से सत्र जानकारी को बनाए रखने के लिए कोई तेज़ी से क्या होगा? TempData को बनाए रखने के अतिरिक्त कोड ओवरहेड भी है। एक सत्र काफी हल्का होना चाहिए - हमारे मामले में यह कुछ दर्जन बाइट्स है - इसलिए अनुरोध का ओवरहेड न्यूनतम होना चाहिए। एक कुकी आधारित सत्र स्टोर 2007 में रेल में मानक के रूप में अपनाया गया था। यह आलेख चर्चा करता है कि उन्होंने इस कदम को क्यों बनाया। http://ryandaigle.com/articles/2007/2/21/what-s-new-in-edge-rails-cookie-based- सत्र –

+1

मैं रेल समुदाय के लिए बहुत खुश हूं, लेकिन मेरा मुद्दा है सांख्यिकीय डेटा के आधार पर: http://yuiblog.com/blog/2007/03/01/performance-research-part-3/। टेम्प्टाटा सत्र के दौरान फायदेमंद है कि इसके ओवरहेड केवल एक बार लागू होते हैं - पृष्ठ राउंडट्रिप के दौरान। अन्यथा कुकीज़ साफ होनी चाहिए। वैसे भी, एक वेब-फार्म परिदृश्य में एक कड़वी अनुभव के बाद मैं सत्र का उपयोग नहीं करता, यह इसके लायक नहीं है। – DreamSonic

+0

सत्र स्थिति के लिए अब आप किस विधि का उपयोग कर रहे हैं? मैंने सोचा था कि सत्र ऑब्जेक्ट (चाहे इन्प्रोक या नहीं) या कुकी केवल एक ही विकल्प है? – UpTheCreek

5

मुझे लगता है कि यह कुकी में सत्र आईडी (एक हैश या जो भी) स्टोर करने के लिए और अधिक कुशल होगा, और फिर उस आईडी का उपयोग स्मृति/डेटाबेस/जो भी स्टोरेज आप पसंद करते हैं, से सत्र डेटा प्राप्त करने के लिए करें। कुकी में पूर्ण सत्र स्थिति को रखना बैंडविड्थ को अनावश्यक रूप से बढ़ाता है।

इसके अलावा, सुरक्षा का ध्यान रखें: यदि कुकी प्रमाणीकरण जानकारी या अन्य संवेदनशील डेटा होता है और आप सावधान नहीं कर रहे हैं, यह आसानी से उपयोगकर्ता द्वारा हैक किया जा सकता अपने आवेदन के साथ विशेषाधिकार या अन्यथा गड़बड़ हासिल करने के लिए (एन्क्रिप्ट करने डेटा बेकार भी, क्योंकि तब आपको एन्क्रिप्टेड डेटा बेस -64 एन्कोड करना होगा, जो आगे बैंडविड्थ और प्रोसेसिंग समय को बर्बाद कर देगा)। आपको उपयोगकर्ता से ट्रस्ट इनपुट नहीं होना चाहिए।

+0

क्या इस मामले में एक कस्टम सत्र-राज्य स्टोर आवश्यक होगा या क्या यह web.config में सत्र अक्षम करने के लिए समझ में आता है? –

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