2012-12-28 15 views
5

मैं MVC4 के साथ मेरी पहली uber छोटे webapp बनाया है। अब तक मैंने वेबपैप को लेआउट करने के लिए लेआउट सामान का उपयोग किया है और कुछ दृश्य नियंत्रकों और उपयोगकर्ताओं को लॉग इन करने और उपयोगकर्ताओं को लॉग इन करने की अनुमति देने के लिए जोड़ा है।ASP.NET MVC4 सेशन स्टेट की दुकान उपयोगकर्ता नाम

उपयोगकर्ता लॉग इन/पंजीकृत होने के बाद, मैं सत्र में अपना उपयोगकर्ता नाम संग्रहीत करता हूं। मैंने सत्र से इस संपत्ति को यह निर्धारित करने के लिए पढ़ा है कि कोई उपयोगकर्ता लॉग इन है या नहीं।

क्या यह एक बुरा अभ्यास है? मैंने रीस्टफुल और स्टेटलेस वेबपैप्स के बारे में बहुत कुछ पढ़ा। मुझे थोड़ी सी भावना महसूस हो रही है कि मुझे अपने सत्र में कुछ भी नहीं बचाया जाना चाहिए।

उदा

@if (string.IsNullOrEmpty(Session["User"] as string)) 
{ 
    <dl> 
     <dt><a href="/Account/Register">Register</a></dt> 
     <dt><a href="/Account/Login">Login</a></dt> 
    </dl> 
} 
else 
{ 
    <dl> 
     <dt><a href="/Account/ShowAccount/@Session["User"]">@Session["User"]</a></dt> 
     <dt><a href="/Account/Logout">Log out</a></dt> 
    </dl>  
} 

प्रश्न 1: क्या यह एक बुरा अभ्यास है?

Q2: इस "सुरक्षित हैक" है? जैसा कि, वर्तमान सत्र को हैक करना आसान है और सत्र ["उपयोगकर्ता"] में एक मूल्य को लॉग इन करना आसान है?

+4

क्यों न सिर्फ ASP.NET सदस्यता कार्यक्षमता में बनाया का उपयोग करता है, तो पहले से कोई उपयोगकर्ता में लॉग ऑन है की जाँच करने के लिए है? –

+0

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

उत्तर

7

आपके सवालों के जवाब के लिए:

1) सामान्यतः, सत्र राज्य का उपयोग नहीं कर बुरा व्यवहार, जब तक आप अपने अनुप्रयोगों के लिए इसकी आवश्यकता है और आप प्रदर्शन और scalability पर इसके प्रभावों को समझने के रूप में है। हालांकि, आपके मामले में, अगर आप सभी स्टोर करने के लिए की जरूरत है उपयोगकर्ता का नाम है, तो आप वास्तव में इसे, अगर आपके आवेदन एक ASP.Net सदस्यता प्रदाता उपयोग कर रहा है की जरूरत नहीं है, तो इस जानकारी को MVCController में उपयोगकर्ता संपत्ति में उपलब्ध है आधार वर्ग:

var username = User.Identity.Name 

तीन तरीके है कि सत्र डेटा संग्रहीत किया जा सकता है: "inproc", जहां यह एप्लिकेशन प्रक्रिया, "StateServer", जहां यह एक अलग सर्वर पर उत्पादन प्रक्रिया संग्रहीत किया जाता है में जमा हो जाता है और "एसक्यूएल सर्वर", जहां यह एक SQL सर्वर डीबी में संग्रहीत है। आप कौन-सी का उपयोग करना चाहिए पर निर्भर करता है कि आप एक सर्वर फ़ार्म उपयोग कर रहे हैं, तो आपकी सत्र टिकाऊ होने की जरूरत है अगर (अर्थात एक मशीन रिबूट जीवित रहने के), और क्या प्रदर्शन की आवश्यकताओं को अपने अनुप्रयोग के लिए कर रहे हैं (StateServer और SQLServer कि inproc कम performant हैं)। अधिक जानकारी here

2 पाया जा सकता है) आप एसएसएल का उपयोग करना चाहिए अपने सत्र डेटा की रक्षा के लिए। एसएसएल (एचटीटीपीएस) पर भेजा गया डेटा पूरी तरह से एन्क्रिप्टेड है, हेडर शामिल हैं (इसलिए कुकीज़)। कैसे सत्र अपहरण हमलों को रोकने के बारे में एक अच्छी चर्चा found here.

+0

आपको दस लाख धन्यवाद! मेरे पास अब लगभग एक कामकाजी आवेदन है :) – bas