वेब की स्टेटलेस प्रकृति के कारण, सत्र भी वस्तुओं को जारी रखने और उन्हें एक सत्र में संग्रहीत करने के अनुरोधों के साथ वस्तुओं को बनाए रखने का एक अत्यंत उपयोगी तरीका है।
इसका एक सही उपयोग मामला हो सकता है यदि आपको अपने आवेदन में नियमित जानकारी तक पहुंचने की आवश्यकता है, प्रत्येक अनुरोध पर अतिरिक्त डेटाबेस कॉल को बचाने के लिए, इस डेटा को एक ऑब्जेक्ट में संग्रहीत किया जा सकता है और प्रत्येक अनुरोध पर अनारक्षित किया जा सकता है, जैसे:
हमारे पुन: प्रयोज्य, क्रमबद्ध वस्तु:
[Serializable]
public class UserProfileSessionData
{
public int UserId { get; set; }
public string EmailAddress { get; set; }
public string FullName { get; set; }
}
उदाहरण:
public class LoginController : Controller {
[HttpPost]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
var profileData = new UserProfileSessionData {
UserId = model.UserId,
EmailAddress = model.EmailAddress,
FullName = model.FullName
}
this.Session["UserProfile"] = profileData;
}
}
public ActionResult LoggedInStatusMessage()
{
var profileData = this.Session["UserProfile"] as UserProfileSessionData;
/* From here you could output profileData.FullName to a view and
save yourself unnecessary database calls */
}
}
एक बार जब यह ऑब्जेक्ट सीरियलाइज्ड हो जाता है, तो हम इसे बनाने के लिए या फिर से मौजूद डेटा के लिए डेटाबेस को क्वेरी किए बिना सभी नियंत्रकों में इसका उपयोग कर सकते हैं।
निर्भरता इंजेक्शन का उपयोग करके अपने सत्र वस्तु को इंजेक्ट करें
एक आदर्श दुनिया में आप ' इंटरफेस टू प्रोग्राम, इम्प्लीमेंटेशन नहीं ' और अपनी अनुक्रमिक सत्र ऑब्जेक्ट को अपनी कंट्रोलर पसंद के कंट्रोलर कंटेनर का उपयोग करके अपने कंट्रोलर में इंजेक्ट करते हैं, जैसे कि (यह उदाहरण स्ट्रक्चरापोर का उपयोग करता है क्योंकि यह वह है जिससे मैं सबसे अधिक परिचित हूं। )।
public class WebsiteRegistry : Registry
{
public WebsiteRegistry()
{
this.For<IUserProfileSessionData>().HybridHttpOrThreadLocalScoped().Use(() => GetUserProfileFromSession());
}
public static IUserProfileSessionData GetUserProfileFromSession()
{
var session = HttpContext.Current.Session;
if (session["UserProfile"] != null)
{
return session["UserProfile"] as IUserProfileSessionData;
}
/* Create new empty session object */
session["UserProfile"] = new UserProfileSessionData();
return session["UserProfile"] as IUserProfileSessionData;
}
}
फिर आप इसे अपनी Global.asax.cs
फ़ाइल में पंजीकृत करेंगे ।
उन लोगों के लिए जो सत्र वस्तुओं को इंजेक्ट करने से परिचित नहीं हैं, आप यहां विषय के बारे में अधिक गहन ब्लॉग पोस्ट पा सकते हैं ।
खतरे के संकेत के लिए एक शब्द ही काफी है:
यह ध्यान देने योग्य है कि सत्रों को न्यूनतम रखा जाना चाहिए, बड़े सत्र प्रदर्शन मुद्दों का कारण बन सकते हैं।
यह उन्हें (पासवर्ड, आदि) में किसी भी संवेदनशील डेटा को स्टोर नहीं करने की भी सिफारिश की जाती है।