2010-07-09 17 views
6

में एकाधिक वेब अनुप्रयोगों में एक ही सत्र आईडी को बनाए रखने के लिए कैसे करें I अलग-अलग वर्चुअल निर्देशिकाओं पर आईआईएस पर दो समान अनुप्रयोग सेटअप हैं (मैंने यह सुनिश्चित करने के लिए कुछ काम किया है कि उनके पास एक ही एप्लिकेशन नाम है)। क्या सत्र आईडी को दो एएसपीनेट वेब अनुप्रयोगों में साझा करने का कोई तरीका है?एएसपी.NET

चूंकि मैं स्टेटसर्वर में सत्र संग्रहीत कर रहा हूं, इसलिए उन्हें दोनों को एक ही सत्र डेटा मिलना चाहिए, हालांकि, जब भी मैं आवेदन से लेकर आवेदेटिनो बी में जाता हूं, तो एक अलग सत्र आईडी बनाई जाती है। क्या यह भार संतुलन परिदृश्य में भी नहीं होगा? जहां मैं www.test.com पर जाता हूं, यह उस अनुरोध को सर्वर पर रीडायरेक्ट करेगा, और फिर यदि मैं इसे फिर से दबाता हूं, तो यह सर्वर बी पर जाएगा, लेकिन चूंकि यह एक अलग वेब एप्लिकेशन है, यह एक नया सत्र आईडी बनाएगा ?

+0

बस इसे डेटाबेस में फेंक दें। आप सत्र की सीमाओं को समायोजित करने के लिए पीछे की तरफ झुक रहे हैं। –

+0

डेटाबेस एक ही समस्या होगी जब तक कि मैं एक वर्कअराउंड लागू नहीं करता। चूंकि यह डीबी में दो अलग-अलग अनुप्रयोग हैं, इसलिए इसमें 2 अलग-अलग सत्र होंगे। –

+0

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

उत्तर

7

सबसे पहले, दोनों ऐप्स में cookieName = "SOME_COOKIE_NAME_HERE" का उपयोग करने के लिए अपने web.config में sessionState तत्व को कॉन्फ़िगर करें।

फिर, सुनिश्चित करें कि यूआरएल के पास एक ही टीएलडी (शीर्ष-स्तरीय डोमेन) है, यानी app1.mydomain.com और app2.mydomain.com और आप Global.asax में सत्र_स्टार्ट ईवेंट को संभालने में सक्षम होना चाहिए और डाल दें यह कोड:

HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString()); 
    cookie.Expires = DateTime.Now.AddMinutes(20); 
    cookie.Domain = "*.mydomain.com"; 
    cookie.HttpOnly = true; 
    Response.SetCookie(cookie); 

इसके अलावा, मैं अनुशंसा करता हूं कि आप एसक्लसेवर सत्रस्टेट मोड के साथ जाएं।

+0

क्या यह स्टेटसर्वर सत्र मोड के साथ भी काम करेगा? –

+0

मुझे नहीं लगता कि क्यों नहीं। –

+0

दिलचस्प। इस परिवर्तन को लागू करने के बाद, मुझे प्रति अनुरोध एक नया सत्र आईडी मिलता है। यहाँ मेरी Global.asax कोड है: \t शून्य session_start (वस्तु प्रेषक, EventArgs ई) \t { \t \t HttpCookie कुकी = नए HttpCookie ("SessionCookie", Session.SessionID.ToString()); \t \t कुकी.एक्सपायर = डेटटाइम.अब। AddMinutes (20); \t \t कुकी.डोमेन = "* .keivantest।StateServer " \t \t \t stateConnectionString: कॉम"; \t \t

-1

क्या आपका लक्ष्य 2 सत्रों के बीच सत्र स्थिति साझा करना है, न केवल सत्र आईडी? मेरा मानना ​​है कि राज्य सर्वर डेटा स्टोर करने के लिए एप्लिकेशन पथ के साथ-साथ सत्र आईडी का भी उपयोग करता है, भले ही सत्र आईडी समान हो, फिर भी आप डेटा साझा करने में सक्षम नहीं होंगे। आपको अपना सत्र मॉड्यूल लिखना पड़ सकता है।

लोड संतुलन वेब ऐप्स में यह समस्या नहीं है क्योंकि एप्लिकेशन पथ क्लस्टर सदस्यों में समान है।

+0

आप सही हैं। मैं एक ही अनुप्रयोग के लिए एक ही अनुप्रयोग नाम के लिए एक ही अनुप्रयोग नाम सेट करने के लिए एक httpmodule का उपयोग कर रहा हूँ। –

+0

उन्होंने कहा कि वह आवेदन नाम प्राप्त करने में परेशानी के लिए गए थे –

1

प्रारंभ में मुझे एक ही समस्या का सामना करना पड़ा। मैंने जो किया है, मैं प्रत्येक डोमेन से jsession आईडी को ओवरराइड करता हूं। मेरा मतलब है, यदि उपयोगकर्ता domain1.com पर उतरता है, तो if2ame से domain2.com के लिए एक ही सत्र आईडी सेट करें। और इसके विपरीत। इसके साथ, आप एकाधिक डोमेन में एक ही सत्र को बनाए रख सकते हैं।

आपको लोड बैलेंसर वाले नेटवर्क पर एकाधिक सर्वर पर प्रभाव का परीक्षण करने की आवश्यकता है।