2009-09-14 19 views
11

में लॉगिन के बाद सत्र आईडी को कैसे बदला जाए मेरे पास एक ऐसी वेबसाइट है जो फॉर्म प्रमाणीकरण और सदस्यता का उपयोग कर रही है। उपयोगकर्ता के पास साइट का उपयोग करने के लिए कुकीज़ सक्षम होना चाहिए। मुझे कोड बदलने के लिए कहा गया है ताकि जैसे ही कोई उपयोगकर्ता लॉग इन करता है, सत्र आईडी बदल जाती है। जाहिर है, यह एक सत्र निर्धारण हमले (http://en.wikipedia.org/wiki/Session_fixation) के खिलाफ सुरक्षा करेगा। क्या कोई जानता है कि पूरे सत्र को खोए बिना मैं सत्र आईडी कैसे बदल सकता हूं? PHP को ऐसा करने के लिए एक विशिष्ट विधि है लेकिन मुझे .NET समकक्ष नहीं मिल रहा है।asp.net

उत्तर

5

Here's a blog post है कि इस बारे में बात करती:

ASP.NET सीधे कार्यक्षमता का समर्थन नहीं करता एक सत्र आईडी पुनर्जीवित करने के लिए। समस्या here के बारे में दस्तावेज़ देखें। ASPNET_SessionID को पर खाली स्ट्रिंग और को रीडायरेक्ट करने के लिए पर रीडायरेक्ट करने के लिए यह करने के लिए not-so quick and dirty way है।

+1

मैं विस्फोट इस बारे में सोचते हैं, लेकिन पुनर्जन्म के बाद सत्र वस्तु में सभी वस्तु खो देंगे कि ... – MemoryLeak

+1

जिस ब्लॉग पोस्ट से आप लिंक करते हैं वह अब उपलब्ध नहीं है। –

6

मैंने Generating a new ASP.NET session in the current HTTPContext पर एक समान प्रश्न का उत्तर दिया है। मूल रूप से हमें सत्र सत्र में कुछ खोए बिना सत्र आईडी को पुन: उत्पन्न करने में सक्षम होने के लिए कुछ सत्रस्टेट मॉड्यूल आंतरिक स्थिति को बदलना होगा। मैंने _rqId फ़ील्ड को नई आईडी और _rqSessionStateNotFound को सत्य पर सेट करने के लिए प्रतिबिंब का उपयोग किया। नकारात्मकता यह है कि हमें आवेदन के लिए "पूर्ण ट्रस्ट" देना होगा।

+2

[स्वीकृत उत्तर] (http://stackoverflow.com/a/1419508/295686) .NET 1.1 पर लक्षित एक लेख का संदर्भ देता है (और यह वास्तव में सत्र निर्धारण को संबोधित नहीं करता है, केवल पुराना सत्र आईडी पुन: उपयोग करता है), लेकिन यह समाधान अधिक सुरुचिपूर्ण था और हमारे .NET 4.5 एप्लिकेशन (एक एमवीसी साइट और एक वेब फॉर्म साइट) में काम किया। – mlhDev

1

यह यहाँ एक बहुत पुराने सवाल मैं पुनर्जीवित कर रहा हूँ है, लेकिन समाधान है:

var manager = new SessionIDManager(); 
bool redirected, isAdded; 
manager.SaveSessionID(System.Web.HttpContext.Current, 
    "5vonjb4mtb1of2fxvhjvkh5d", out redirected, out isAdded); 

// sessionId now equals "5vonjb4mtb1of2fxvhjvkh5d" 
var sessionId = Session.SessionID; 
+0

मुझे पता है, यह कुछ समय हो गया है। लेकिन हमने आपके कोड की कोशिश की और यह हमारे लिए काम नहीं कर रहा है। sessionId "5vonjb4mtb1of2fxvhjvkh5d" के बराबर नहीं है। – mosquito87

+0

मैंने सफलता के साथ ऐसा किया। सत्रीय नए सत्र में बदल जाता है। – pinopino

+2

यह हमें करीब मिला लेकिन पर्याप्त नहीं है - अभी भी इस पर काम कर रहा है। यह सत्र आईडी अपडेट करता है और कुकी अपडेट को नीचे भेजता है जैसा कि आप उम्मीद करेंगे लेकिन हम अभी भी उसी अनुरोध के दौरान सत्र का उपयोग करना चाहते हैं। हम अभी ऐसा करने में सक्षम नहीं हैं - ऐसा लगता है कि सत्र बैग पहले वाला है; अगला अनुरोध नया सत्र बैग देखता है लेकिन हमारे मूल्य वहां नहीं हैं। – mlhDev