2009-12-28 10 views
10

मैं अपने उपयोगकर्ताओं के सत्रों को दूर करने की संभावना के बारे में चिंतित हूं। मैं डिफ़ॉल्ट एएसपी.NET सत्र ऑब्जेक्ट और सत्र कुकीज़ का उपयोग कर रहा हूं। मुझे पता है कि सत्र समय समाप्त हो सकते हैं, और मैंने आश्चर्यजनक समय-समय पर बचने के लिए कई सत्रों में अपने सत्रों के लिए टाइमआउट मान निर्धारित किया है।एक एएसपी.NET साइट में परिवर्तन सक्रिय सत्रों को मारता है?

लेकिन कम से कम दो अन्य मामले हैं जिनके बारे में मुझे चिंता है।

(1) मैं समझता हूं कि एएसपी.नेट समय-समय पर साइट/वेब ऐप चलाने वाले ऐप डोमेन को पुन: उपयोग करता है (सुनिश्चित नहीं है कि मेरे पास सभी शब्दावली सही है या नहीं)। सत्र इन रीसायकल घटनाओं में रहते हैं?

(2) कम से कम मेरे विकास सर्वर पर, कुछ बदलाव जो मैं साइट पर करता हूं (उदाहरण के लिए, एक नया पृष्ठ जोड़ना) सक्रिय सत्र को खोने का कारण बनता है जब साइट (या इसका हिस्सा) को फिर से सम्मिलित किया जाता है । ऐसा लगता है कि हर बदलाव के साथ ऐसा नहीं होता है, लेकिन कई लोगों के साथ ऐसा होता है। मैं विशेष रूप से चिंतित हूं कि मेरी साइट लाइव होने पर परिवर्तन की संभावना के लिए इसका क्या अर्थ है। सक्रिय नियमों को मारने के बिना मैं जो भी अपडेट कर सकता हूं उसके नियमों को जानना चाहता हूं।

किसी भी पॉइंटर्स के लिए धन्यवाद।

उत्तर

12

यह आपके सत्र स्थिति के मोड पर निर्भर करता है। एएसपी की स्मृति में inproc मोड भंडार मान:

  • inproc:

    ASP.NET सत्र स्थिति के तीन मोड का समर्थन करता है: यहां आप Microsoft Support पर पा सकते हैं कुछ की एक प्रति है .NET कार्यकर्ता प्रक्रिया। इस प्रकार, यह मोड इन मानों की सबसे तेज़ पहुंच प्रदान करता है। हालांकि, जब ASP.NET कार्यकर्ता प्रक्रिया पुन: उपयोग करता है, तो राज्य डेटा खो गया है।

  • राज्यसेवर: वैकल्पिक रूप से, राज्य सर्वर मोड माइक्रोसॉफ्ट विंडोज सेवा सत्र चर स्टोर करने के लिए उपयोग करता है। चूंकि यह सेवा Microsoft इंटरनेट सूचना सर्वर (आईआईएस) से स्वतंत्र है, यह एक अलग सर्वर पर चल सकता है। आप लोड-बैलेंसिंग समाधान के लिए इस मोड का उपयोग कर सकते हैं क्योंकि एकाधिक वेब सर्वर सत्र चर साझा कर सकते हैं। यद्यपि यदि आप आईआईएस को पुनरारंभ करते हैं तो सत्र चर खो नहीं जाते हैं, जब आप प्रक्रिया सीमाओं को पार करते हैं तो प्रदर्शन पर प्रभाव पड़ता है।
  • SqlServer: आप बहुत सत्र जानकारी के हठ के बारे में चिंतित हैं, तो आप Microsoft एसक्यूएल सर्वर लाभ उठाने के लिए विश्वसनीयता के उच्चतम स्तर सुनिश्चित करने के लिए SqlServer मोड का उपयोग कर सकते हैं। SqlServer मोड आउटपुट प्रक्रिया के समान है, को छोड़कर कि सत्र डेटा SQL सर्वर में बनाए रखा जाता है। एसक्यूएल सर्वर मोड आपको आईआईएस प्रक्रिया से बाहर स्थित एक राज्य स्टोर का उपयोग करने में सक्षम बनाता है और यह स्थानीय कंप्यूटर या दूरस्थ सर्वर पर स्थित हो सकता है।

आप StateServer या एक डाटाबेस जब आईआईएस वेबसाइट के लिए एक परिवर्तन का पता लगाता अपने सत्र डेटा गुम नहीं होगा का उपयोग करते हैं।

+0

@ जोकन, 'हाय', 'आशा है कि यह मदद करता है' जैसे चिट-चैट जोड़ने के लिए अप्रासंगिक है :-) –

+0

धन्यवाद। हां, मैंने यह भी पाया: http://www.hanselman.com/blog/CommentView.aspx?guid=1fe4931a-ec50-4288-91e4-8d83a598a5be ऐसा लगता है कि मैं मूर्खता से सोच रहा था कि इनप्रोक समाधान उचित था, लेकिन यह मूल रूप से बेकार लगता है क्योंकि आप कभी नहीं जानते कि कोई सत्र कब मर सकता है। मुझे लगता है कि मैं एसक्यूएल सर्वर विकल्प का प्रयास करूंगा। –

+1

मेरी राय में राज्य सर्वर सबसे आसान है और इनप्रोक एक विकल्प नहीं है तो सबसे अच्छा प्रदर्शन कर रहा है। – Jochen

3

(1) आप अनुप्रयोग पूल पुनर्चक्रण पर प्रक्रिया सत्र मोड में उपयोग करते हैं आप सत्र जानकारी खो देंगे

(2) निर्भर करता है यदि आप वेब अनुप्रयोग या अपने asp.net अनुप्रयोग के लिए वेब साइट मॉडल का उपयोग कर रहे हैं । कुछ फ़ाइलों को एप्लिकेशन प्रारंभ पर कैश किया जाता है और यदि वे बदल जाते हैं तो पुनरारंभ या पुन: संकलन की आवश्यकता होती है। अंगूठे का नियम यह है कि यदि आप Global.asax को बदलते हैं, तो \ bin फ़ोल्डर में फ़ाइल को जोड़ने, हटाने या संपादित करने की कॉन्फ़िगरेशन फ़ाइल जारी की जाएगी और प्रक्रिया सत्र डेटा खो जाएगा।

एएसपी.नेट सत्र में कई त्रुटियां हैं और कई डेवलपर इसका उपयोग नहीं करते हैं। मैं व्यक्तिगत रूप से SQL सर्वर (यदि उपलब्ध हो) में कस्टम टेबल में डेटा स्टोर करना पसंद करता हूं।

यदि आप आईआईएस के किस संस्करण के बारे में अधिक जानकारी प्रदान करना चाहते हैं, तो क्या आप वेब साइट या वेब एप्लिकेशन मॉडल का उपयोग करते हैं, क्या आपके पास डेटाबेस सर्वर उपलब्ध है, क्या आप वेब फार्म या वेब गार्डन सर्वर पर्यावरण का उपयोग करते हैं, और क्या वह जानकारी जो आप स्टोर करना चाहते हैं और कितनी देर तक मैं आपको अधिक ठोस सलाह दे सकता हूं।

+0

अतिरिक्त जानकारी के लिए धन्यवाद। क्या आप कह रहे हैं कि आप एएसपी.NET सत्रों के एसक्यूएल सर्वर संस्करण का भी उपयोग नहीं करते हैं? एएसपी.नेट एसक्यूएल सत्रों के साथ त्रुटियां क्या हैं? –

+2

डिफ़ॉल्ट मोड में, सत्र मॉड्यूल डीबी को दो राउंड-ट्रिप का कारण बनता है: डेटा को पढ़ने और सत्र समाप्ति समय को अपडेट करने के लिए पृष्ठ की शुरुआत में, और पृष्ठ के अंत में सत्र डेटा अपडेट करने के लिए । इसके अलावा, यह सत्र डेटा पर एक विशेष लॉक जारी करता है, इसलिए यदि आपके पास समान उपयोगकर्ता से पृष्ठ हैं जो समानांतर (जैसे फ्रेम या अजाक्स के साथ) में चल सकते हैं, तो उन्हें लॉक के कारण क्रमशः चलाने के लिए मजबूर होना होगा। आप उन पृष्ठों को चिह्नित करके कुछ मुद्दों को कम कर सकते हैं जिन्हें या तो सत्र स्थिति की आवश्यकता नहीं है, या केवल इसे केवल पढ़ने-योग्य मोड में ही चाहिए। – RickNZ

+0

मैं पूरी तरह से रिकनज़ से सहमत हूं।इसके अलावा बॉक्स के बाहर सत्र प्रोग्रामिंग मॉडल बिल्कुल आवश्यक नहीं है क्योंकि सत्रों की आवश्यकता होती है और सत्र में वस्तुओं का कोई प्रबंधन नहीं होता है। हमारे पास एक कहावत है कि: एएसपी.नेट सत्र एक सुअर की तरह है - यह आपको कभी भी देता है। यदि आप सत्र का उपयोग करना चाहते हैं तो मैं एक प्रॉक्सी क्लास बनाने का सुझाव देता हूं जो कि उन सभी ऑब्जेक्ट्स के रूप में उजागर करता है जिन्हें आप इसमें रखना चाहते हैं। –

0

यदि आप इनप्रोक मोड का उपयोग कर रहे हैं, तो आप ऐपपूल रीसायकल करते समय सत्र डेटा खो देंगे, जो दिन में या तो (डिफ़ॉल्ट शेड्यूल के अनुसार) या सर्वर पर निष्क्रियता के लगभग 20 मिनट बाद हो सकता है।

पृष्ठ अपडेट के संबंध में: जब भी आप लाइव साइट पर कोई फ़ाइल बदलते हैं, तो एक मौका है कि साइट पुनरारंभ हो जाएगी, जैसे कि आपने web.config को बदल दिया है। कुछ फाइलें पूर्ण पुनरारंभ नहीं कर सकती हैं, लेकिन भविष्यवाणी करना आसान नहीं है, और यह आपके द्वारा उपयोग किए जा रहे संकलन मोड पर भी निर्भर करता है (बैच या नहीं)। यदि आप डिफ़ॉल्ट प्रति-फ़ोल्डर बैच संकलन मोड का उपयोग कर रहे हैं, तो आप पुनरारंभ करने के बिना उपफोल्डर्स में अलग-अलग पृष्ठों को बदलने में सक्षम होना चाहिए। मास्टर पेज, कोड या नियंत्रण में परिवर्तन, हालांकि, पुनरारंभ कर सकते हैं, क्योंकि शीर्ष-स्तरीय फ़ोल्डर में परिवर्तन हो सकता है (आपके पास और क्या है) के आधार पर।

मुझे लगता है कि मुझे यह जोड़ना चाहिए कि लाइव साइट पर अलग-अलग फ़ाइलों को बदलना आम तौर पर एक अच्छा विचार नहीं है - हालांकि मुझे यकीन है कि आपके पास ऐसा करने के आपके कारण हैं।

+0

अतिरिक्त जानकारी के लिए धन्यवाद। मैं देख सकता हूं कि यह रहस्यमय क्यों था कि कुछ बदलावों से सत्र में कमी आई और दूसरों ने नहीं किया। अपग्रेड के विषय पर, यदि मैं साइट को नीचे लाए बिना या उपयोगकर्ता सत्र में बाधा डाले बिना छोटे बदलाव करना चाहता हूं, तो फ्लाई पर छोटे बदलाव करने के जोखिम क्या हैं (जब तक मुझे पता है कि वे सत्र स्थिति चर नहीं बदलते हैं , आदि।)? –

+0

ध्यान रखें कि डिफ़ॉल्ट मोड में, जब आप एक फ़ाइल बदलते हैं, तो उस फ़ोल्डर में मौजूद सभी फ़ाइलों को फिर से संकलित किया जाएगा। उस समय, उन फ़ाइलों में से किसी तक पहुंचने का प्रयास करने वाले उपयोगकर्ता को प्रतीक्षा करने के लिए मजबूर किया जाएगा। यदि फ़ोल्डर काफी बड़ा है या यदि आपके पास उन फ़ाइलों तक पहुंचने का प्रयास करने वाले पर्याप्त उपयोगकर्ता हैं, तो आपके कार्यकर्ता धागे सभी उपभोग हो सकते हैं, और आपकी पूरी साइट तब तक रोक सकती है जब तक कि पुनर्मूल्यांकन पूरा न हो जाए। सबसे बुरे मामले में, व्यस्त साइट पर, कतार इतनी पूर्ण हो सकती है कि उपयोगकर्ता "सर्वर बहुत व्यस्त" त्रुटियों से दूर हो जाते हैं। – RickNZ

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