2012-01-25 9 views
7

के रूप में वापस आ गया है मेरे पास इन-प्रो सत्र स्थिति के साथ एक उत्पादन समस्या है।एमवीसी 3 .NET सत्र यादृच्छिक रूप से सत्र मूल्य खो रहा है और शून्य

हमारे आवेदन MVC 3 नेट ढांचे पर आधार है और Sitecore सीएमएस चल हमारी साइट में एकीकृत है।

हमारे उपयोगकर्ताओं को अनुभव कर रहे हैं बाहर आवेदन प्रवाह के माध्यम से "ऑब्जेक्ट संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं" बेतरतीब ढंग से।

व्यापक प्रवेश करने के बाद और पता लगाने जब सत्र वस्तु अशक्त रिटर्न हम यह निष्कर्ष निकाल सकता है इस कारण होता था।

यहां हमें जो कुछ मिला और जो हम जानते हैं उसके बारे में कुछ विवरण यहां दिए गए हैं।

  1. सत्र आईडी ही उपयोगकर्ता के लिए लगातार किया जा रहा है और आवेदन में जिस तरह से सही ढंग से सभी पारित कर दिया है।
  2. मुझे विश्वास नहीं है कि यह एक कोड मुद्दा है, क्योंकि यह केवल यादृच्छिक अंतराल पर उत्पादन पर होता है, स्थानीय, देव या स्टेजिंग वातावरण पर कभी नहीं होता है।
  3. लोड उत्पादनकर्ता के माध्यम से दो उत्पादन सर्वर चल रहे हैं।
  4. कोई सर्वर लगातार समस्या नहीं है, क्योंकि हमने सर्वर में से किसी एक को सोकर और एक सर्वर पर सभी ट्रैफिक रूट होने का परीक्षण किया है। लॉगिंग के माध्यम से हम पहचान सकते हैं कि उपयोगकर्ता एक ही सर्वर पर टक्कर मार रहा है, लेकिन सत्र शून्य हो गया है।
  5. यह क्लाइंट समस्या भी प्रतीत नहीं होता है, क्योंकि वे पहले से ही किसी त्रुटि का सामना करते हैं, भले ही वे एप्लिकेशन के माध्यम से सफलतापूर्वक जा सकें।
  6. यह यातायात लोड या सर्वर लोड समस्या प्रतीत नहीं होता है, क्योंकि यह दिन के दौरान यादृच्छिक समय पर होता है, और यादृच्छिक उपयोगकर्ताओं के दौरान होता है।
  7. ऐसा लगता है कि यह ऐप पूल रीसाइक्लिंग के कारण नहीं होता है।
  8. यह सत्र समय समाप्ति के कारण प्रतीत नहीं होता है क्योंकि हमने टाइमआउट को दो घंटे के लिए सेट किया है और जब हम लॉग ट्रैक करते हैं, तो उपयोगकर्ता प्रवाह में 5-10 मिनट का अनुभव कर सकते हैं।

साइड नोट: हमें हमारे साइटकोर सीएमएस के कारण इन-प्रो सत्र स्थिति का उपयोग करना होगा। तो डिजाइन बदलना एक विकल्प नहीं है।

मैं एक सिद्धांत है यह सत्र लॉकिंग के साथ कुछ हो सकता है या समवर्ती पहुंच का प्रयास से भ्रष्ट किया जा रहा।

कुछ जगह हम इस समस्या को जब उपयोगकर्ता जावास्क्रिप्ट (windows.location) द्वारा पुनः निर्देशित किया जा रहा है हमारे आवेदन से बहुत कुछ है की घटना को देखते हैं।

और उन क्षेत्रों में जहां async AJAX कॉल किए जा रहे हैं।

हम थोड़ी देर के लिए इस पर हमारे सिर खरोंच कर दिया गया है, मैं अगर वहाँ किसी को भी क्या समस्या हो सकती है के लिए किसी भी जानकारी या सिद्धांत होता है सोच रहा हूँ?

धन्यवाद

जोड़ा नोट:

@Mystere & & @ H27Studio, तो मैं भी sessionid या सत्र रीसेट मुद्दों से संबंधित कुछ की खोज की है।कुछ मामलों में हम पाते हैं कि एक पृष्ठ पर रीडायरेक्ट करने पर यह दो डुप्लिकेट जीईटीएस कॉल को विधि में ट्रिगर कर रहा है, जिसमें पहले कॉल को सत्र आईडी गुम हो जाता है और यादृच्छिक रूप से सर्वर में से किसी एक पर रीडायरेक्ट किया जाता है (ऐसा इसलिए है क्योंकि लोड बैलेंसर से सर्वर लगातार सत्र है एक सर्वर पर क्लाइंट रखने के लिए अद्वितीय सत्र बनाने के लिए क्लाइंट आईपी, सत्र आईडी और अन्य शीर्षलेख जानकारी पर आधार)। जब हमारे रीडायरेक्ट पेज विंडो का उपयोग कर रहे हों तो यह हर बार प्रवाह के दौरान होता है। स्थान।

इससे क्लाइंट के लिए "ऑब्जेक्ट रेफरेंस सेट नहीं है .." समस्या खराब होगी, कोई सत्र आईडी कॉल उसी सर्वर पर नहीं मारा जाएगा। (संभवतः क्योंकि कोई सत्र आईडी वाला पहला बुरी कॉल एप्लिकेशन को एक नया सत्र बनाने का कारण बनता है जो मूल सत्र की ऑब्जेक्ट को ओवरराइड करता है) तो दूसरी कॉल पर जहां सही सत्र आईडी एप्लिकेशन में पास हो जाती है, हम पाएंगे कि सत्र ऑब्जेक्ट में शून्य है ।

तो मेरा मानना ​​है कि डुप्लीकेट कॉल के साथ कोई समस्या है जो सत्र ऑब्जेक्ट को साफ़ कर रहा है, जो सुनिश्चित नहीं है कि क्यों या इससे शुरू होने का कारण क्या है।

किसी के पास इस बारे में सुराग है? धन्यवाद

अद्यतन: हम इस मुद्दे को हल करने के लिए इन चरणों को लेने की योजना बना रहे हैं।

  1. हम उन क्षेत्रों में जहाँ Async अजाक्स कॉल किए गए थे में मुद्दों है, इसलिए हम Async सुविधा को हटा कर उसे अजाक्स सिंक में चलाने की योजना बना रहे।
  2. हमारे पास ऐसे मुद्दे हैं जहां Windows.location जावास्क्रिप्ट रीडायरेक्ट हो रहा है। हमने इस क्षेत्र में इस मुद्दे को ठीक करने की उम्मीद में पोस्टबैक का उपयोग करके एक वैकल्पिक विधि बनाई है।
  3. अन्य क्षेत्रों, जो उपर्युक्त मुद्दे में से किसी एक से संबंधित नहीं हैं अभी भी हवा में हैं।

परिवर्तन के प्रभाव को पोस्ट करने के बाद इसे पोस्ट करने के बाद पोस्ट किया जाएगा।

सभी टिप्पणियों के लिए धन्यवाद।

+0

ट्रस्ट सत्र टाइमआउट न करें। अगर सर्वर को अधिक मेमोरी चाहिए तो यह सत्रों को मुक्त कर देगा। मेरे पास नौकरी पर 1 घंटा सेट है, और अभी भी अधिकांश लोग 20 मिनट से पहले और कभी-कभी 5-10 में सत्र खो देते हैं। (और इसकी मशीन 6 जीबी रैम है, और बहुत अधिक ट्रैफिक नहीं है ...) – H27studio

+0

मेरी कंपनी 'इनमाक' का उपयोग करके 'एल्माह' लॉगिंग आदि के बाद भी हमारे सिर खरोंच कर रही है ... –

+2

@ H27studio, क्या आपके पास संदर्भ है "अगर सर्वर को अधिक मेमोरी चाहिए तो यह सत्रों को मुक्त कर देगा"? –

उत्तर

5

खोज और डिबगिंग के महीनों के बाद, मुझे लगता है कि हम अंततः एक निष्कर्ष पर पहुंचे। साइटकोर Analytics रोबोट सत्र टाइमआउट के साथ एक बग प्रतीत होता है। हम पहले देखते हैं कि जब भी यादृच्छिक सत्र गुम हो जाता है, सत्र के पूर्व-परिपक्व समय के कारण होता है, तो हम देखते हैं कि ये सत्र 120min के बजाय 1min टाइमआउट पर सेट हो रहे थे।

सभी कॉन्फ़िगरेशन फ़ाइलों के माध्यम से खोज करने के बाद हम देखते हैं कि साइटकोर विश्लेषणात्मक। Robots.SessionTimeout एकमात्र टाइमआउट मान 1min पर सेट था।

इस मूल्य को बढ़ाकर, यह हमारे सत्र टाइमआउट समस्या को हल करता है।

तो मौलिक समस्या यह है कि साइटकोर Analytics रोबोट सत्र के रूप में कुछ विज़िटर सत्र को गलत पहचान रहा है और 1 मिनट तक अपने टाइमआउट को फिर से सौंप रहा है। यह रिपोर्ट करने के लिए शायद एक बग है।

अद्यतन: Sitecore से प्रतिक्रिया:

Sitecore सीएमएस ASP.NET WebForms प्रौद्योगिकी के साथ उपयोग के लिए डिज़ाइन किया गया था। वेब रूपों का उपयोग करते समय, बॉट डिटेक्शन पृष्ठ के नियंत्रण पर निर्भर करता है। यह स्वाभाविक है कि आप इसे एएसपी.नेट एमवीसी अनुप्रयोग में उपयोग नहीं कर सकते हैं, लेकिन एक आसान समाधान है - निम्नलिखित कोड को तत्व के अंदर रखें:

<% 
if (Context.Diagnostics.Tracing || Context.Diagnostics.Profiling) 
{ 
    Response.Write("<!-- Visitor identification is disabled because debugging is active. -->"); 
} 
else if (Tracker.IsActive && (Tracker.Visitor.VisitorClassification == 925)) 
{ 
    Response.Write("<link href=\"/layouts/System/VisitorIdentification.aspx\" rel=\"stylesheet\" type=\"text/css\" />"); 
} 
%> 
0

मुझे लगता है कि आपकी समस्या Async AJAX कॉल हो सकती है जिसे आप पसंद करते हैं। मैंने हाल ही में डेविड हेडन द्वारा एक लेख पढ़ा है जिसमें समान सत्र में समवर्ती AJAX अनुरोधों के मुद्दों के बारे में बात की गई है। वैसे भी यह देखने के लिए कुछ है। उम्मीद है कि यह मदद करता है।

http://davidhayden.com/blog/dave/archive/2011/02/09/SessionLessControllersMvc3.aspx

वह सही पोस्ट के अंत में इसके बारे में बात करती है।

+0

अजाक्स अनुरोध समस्याएं पैदा नहीं कर रहे हैं, जब सत्र स्थिति सक्षम होती है, तो वे समानांतर पहुंच को रोकने के लिए सर्वर पर किसी अन्य के बाद निष्पादित हो जाएंगे। एक प्रदर्शन समस्या है और गायब सत्रों के साथ ओपी प्रश्न से असंबंधित है। – Jan

+0

मैंने इस लेख को पढ़ लिया है और सोचा है कि यह एक मुद्दा भी हो सकता है, लेकिन जैसा कि जनवरी ने कहा था। यदि पढ़ा/लिखने की स्थिति में है तो सत्र राज्यों को ताला होना चाहिए। इसलिए, समवर्ती AJAX अनुरोध को क्रम में निष्पादित करना होगा। सत्र भ्रष्ट नहीं होना चाहिए। यहां तक ​​कि यदि यह कारण होगा, तो मुझे लगता है कि यह यादृच्छिक अंतराल के बजाय निरंतर आधार पर होगा।लेकिन यह एक ऐसा क्षेत्र है जहां मुझे कम आत्मविश्वास है, शायद मेरे पास यह सत्यापित करने के लिए कोई अच्छी विधि है कि यह मुद्दा है या नहीं? धन्यवाद –

+0

प्रदर्शन समस्या हां लेकिन उन्होंने यह भी बताया कि सत्र दूषित हो सकता है, इसलिए मैंने इसे लाया। बस मदद करने का प्रयास कर रहा हूं। – Perry

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