ওয়েবের রাজ্যহীন প্রকৃতির কারণে, সেশনগুলি অনুরোধগুলির ক্রমবর্ধমান ও একটি অধিবেশনগুলিতে সংরক্ষণ করে অনুরোধগুলি জুড়ে ধরে রাখার একটি অত্যন্ত কার্যকর উপায়।
এটির একটি নিখুঁত ব্যবহারের ঘটনাটি হতে পারে যদি আপনার প্রতিটি অ্যাপ্লিকেশন জুড়ে নিয়মিত তথ্য অ্যাক্সেস করার প্রয়োজন হয়, প্রতিটি অনুরোধে অতিরিক্ত ডাটাবেস কলগুলি সংরক্ষণ করতে, এই ডেটা কোনও বস্তুতে সংরক্ষণ করা যেতে পারে এবং প্রতিটি অনুরোধে অনিয়ন্ত্রিত, যেমন:
আমাদের পুনরায় ব্যবহারযোগ্য, সিরিয়ালাইজযোগ্য অবজেক্ট:
[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
ফাইলে নিবন্ধভুক্ত করবেন ।
ইনজেকশন সেশন অবজেক্টগুলির সাথে যারা পরিচিত নয় তাদের জন্য, আপনি এখানে বিষয় সম্পর্কে আরও গভীরতর ব্লগ পোস্ট পেতে পারেন ।
সতর্কতার শব্দ:
এটি লক্ষণীয় যে সেশনগুলি সর্বনিম্ন রাখা উচিত, বড় সেশনগুলি পারফরম্যান্স সমস্যার কারণ হতে শুরু করে।
এটিতে কোনও সংবেদনশীল ডেটা (পাসওয়ার্ড ইত্যাদি) সংরক্ষণ না করার পরামর্শ দেওয়া হয়।