ASP.NET Core অ্যাপ্লিকেশনে Session এবং Cookies দুটি গুরুত্বপূর্ণ উপাদান, যা ইউজারের ডেটা বা স্টেট ম্যানেজ করতে ব্যবহৃত হয়। এগুলো বিশেষভাবে ব্যবহারকারীর তথ্য সুরক্ষিতভাবে সংরক্ষণ এবং অ্যাপ্লিকেশনের মধ্যে ডেটা শেয়ার করার জন্য ব্যবহৃত হয়।
Session হলো সার্ভার সাইডে ইউজারের তথ্য সংরক্ষণ করার একটি পদ্ধতি, যা ব্যবহারকারীর প্রতিটি রিকোয়েস্টের জন্য একটি ইউনিক আইডি তৈরি করে। এই আইডি ব্যবহার করে সার্ভার ইউজারের ডেটা সংরক্ষণ করে এবং প্রতিটি রিকোয়েস্টে সেই ডেটা অ্যাক্সেস করতে দেয়।
সাধারণত, সেশন ব্যবহারকারীর লগইন স্ট্যাটাস, শপিং কার্ট, এবং অন্যান্য ডায়নামিক ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়।
Session ব্যবহার করতে হলে প্রথমে ASP.NET Core অ্যাপ্লিকেশনে সেশন পরিষেবা রেজিস্টার করতে হবে।
Program.cs বা Startup.cs ফাইলে সেশন পরিষেবা কনফিগার করুন:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache(); // সেশন কুকিজ স্টোর করার জন্য
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30); // সেশন এর সময়সীমা
options.Cookie.HttpOnly = true; // কুকি সিকিউরিটি
options.Cookie.IsEssential = true; // কুকি ব্যবহার করা আবশ্যক
});
}
public void Configure(IApplicationBuilder app)
{
app.UseSession(); // সেশন ব্যবহারের জন্য
}
}
এখন সেশন কনফিগার করার পরে, সেশন ডেটা অ্যাক্সেস এবং সেট করা যায়:
সেশন ডেটা সেট করা:
public class HomeController : Controller
{
public IActionResult SetSessionData()
{
HttpContext.Session.SetString("UserName", "JohnDoe");
return RedirectToAction("GetSessionData");
}
}
সেশন ডেটা রিড করা:
public class HomeController : Controller
{
public IActionResult GetSessionData()
{
var userName = HttpContext.Session.GetString("UserName");
ViewBag.UserName = userName;
return View();
}
}
Cookies হলো ক্লায়েন্ট সাইডে ইউজারের ডেটা সংরক্ষণের পদ্ধতি, যা ইউজারের ব্রাউজারে স্টোর হয়। কুকিজ সাধারণত ইউজারের প্রেফারেন্স, লগইন স্ট্যাটাস, বা ব্রাউজিং হিস্ট্রি সঞ্চিত রাখে, যাতে পরবর্তী রিকোয়েস্টে সেই তথ্য ব্যবহার করা যায়।
Cookies সাধারণত ছোট টেক্সট ফাইল হিসেবে ব্রাউজারে সংরক্ষণ হয় এবং ইউজারের সাথে সংযুক্ত থাকে।
ASP.NET Core অ্যাপ্লিকেশনে কুকি তৈরি এবং সেট করার জন্য, HttpResponse.Cookies এবং HttpRequest.Cookies ব্যবহার করা হয়।
কুকি সেট করা:
public class HomeController : Controller
{
public IActionResult SetCookie()
{
// কুকি সেট করা
Response.Cookies.Append("UserName", "JohnDoe", new CookieOptions
{
Expires = DateTime.Now.AddMinutes(30), // কুকির মেয়াদ
HttpOnly = true, // সিকিউরিটি ফিচার
IsEssential = true // কুকি ব্যবহার করা আবশ্যক
});
return RedirectToAction("GetCookie");
}
}
কুকি রিড করা:
public class HomeController : Controller
{
public IActionResult GetCookie()
{
// কুকি থেকে ডেটা রিড করা
var userName = Request.Cookies["UserName"];
ViewBag.UserName = userName;
return View();
}
}
বৈশিষ্ট্য | সেশন (Session) | কুকি (Cookies) |
---|---|---|
সংরক্ষণ স্থান | সার্ভারে স্টোর হয়। | ক্লায়েন্ট (ব্যবহারকারীর ব্রাউজারে) স্টোর হয়। |
ডেটার ধরন | ডায়নামিক এবং সেশনের সময়কাল পর্যন্ত সংরক্ষিত। | স্থায়ী ডেটা বা প্রেফারেন্স সংরক্ষণ করে। |
সিকিউরিটি | সিকিউর এবং সার্ভার সাইডে সংরক্ষিত। | ব্রাউজারে, তাই কিছুটা কম সিকিউর। |
অ্যাক্সেস | সার্ভার সাইড থেকে অ্যাক্সেস করা হয়। | ক্লায়েন্ট সাইড থেকে অ্যাক্সেস করা হয়। |
অন্তর্ভুক্ত সীমাবদ্ধতা | সার্ভার রিসোর্স ব্যবহার করে। | ব্রাউজারের সীমাবদ্ধতা (4KB পর্যন্ত)। |
Session এবং Cookies দুইটি গুরুত্বপূর্ণ প্রযুক্তি যা ASP.NET Core অ্যাপ্লিকেশনে ব্যবহারকারীর তথ্য সংরক্ষণ ও অ্যাক্সেস করার জন্য ব্যবহৃত হয়। সেশন সাধারণত সার্ভার সাইডে স্টোর করা হয় এবং স্বল্প-মেয়াদী ডেটার জন্য উপযুক্ত, যেখানে কুকি ক্লায়েন্ট সাইডে স্টোর হয় এবং স্থায়ী ডেটা সংরক্ষণে ব্যবহৃত হয়। ব্যবহারকারী স্ট্যাটাস বা ব্রাউজার প্রেফারেন্স সেভ করতে Cookies এবং অ্যাপ্লিকেশনের কার্যকলাপ ট্র্যাক করতে Session ব্যবহৃত হয়।
ASP.NET Core-এ সেশন ব্যবস্থাপনা ব্যবহারকারীর তথ্য সংরক্ষণ এবং ব্যবহারকারীর পরবর্তী রিকোয়েস্টগুলোর জন্য তা পুনরায় ব্যবহার করার একটি কার্যকরী পদ্ধতি। সেশন ব্যবস্থাপনা দ্বারা, আপনি ক্লায়েন্টের সেশনকে ট্র্যাক করতে পারেন, যা একটি নির্দিষ্ট সময়ের জন্য তথ্য সংরক্ষণ করে এবং ব্যবহারকারীর প্রতিটি রিকোয়েস্টে তথ্য অ্যাক্সেস করা সম্ভব হয়।
সেশন হল একটি সার্ভার সাইড প্রযুক্তি যা ক্লায়েন্টের (ব্যবহারকারীর) তথ্য সংরক্ষণ করতে সাহায্য করে। ব্যবহারকারী সাইটে প্রবেশ করার সময় একটি সেশন আইডি তৈরি হয় এবং সেই আইডি ক্লায়েন্টের ব্রাউজারে কুকি (cookie) হিসেবে সংরক্ষিত থাকে। সেশন তথ্য সাধারণত সার্ভার সাইডে রাখা হয়, যা নিরাপদে তথ্য সংরক্ষণ করতে সহায়তা করে।
ASP.NET Core-এ সেশন ব্যবস্থাপনা সহজেই কনফিগার করা যায় এবং এটি ডেটা, শপিং কার্ট, ইউজার অথেনটিকেশন স্টেট এবং অন্যান্য সাময়িক তথ্য সংরক্ষণে ব্যবহৃত হয়।
ASP.NET Core-এ সেশন ব্যবস্থাপনা শুরু করতে হলে প্রথমে সেশন সার্ভিসকে কনফিগার করতে হবে এবং তারপর সেশন ডেটা অ্যাক্সেস করতে হবে।
আপনার Startup.cs ফাইলে সেশন সার্ভিস কনফিগার করতে হবে।
public void ConfigureServices(IServiceCollection services)
{
// সেশন ব্যবস্থাপনা কনফিগার করা
services.AddDistributedMemoryCache(); // ইন-মেমরি ক্যাশ
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30); // সেশন টাইমআউট ৩০ মিনিট
options.Cookie.HttpOnly = true; // শুধুমাত্র HTTP রিকোয়েস্টের মাধ্যমে অ্যাক্সেসযোগ্য
options.Cookie.IsEssential = true; // কুকি প্রয়োজনীয়
});
services.AddControllersWithViews();
}
AddDistributedMemoryCache()
: এটি ইন-মেমরি ক্যাশ তৈরি করে যা সেশন ডেটা সংরক্ষণ করবে।AddSession()
: সেশন ব্যবস্থাপনা সক্ষম করে এবং সেশন আইডি সম্পর্কিত কুকি কনফিগার করে।IdleTimeout
: এটি সেশনের সময়সীমা নির্ধারণ করে। ৩০ মিনিট পর সেশন শেষ হয়ে যাবে।এখন, Configure() মেথডে সেশন ব্যবস্থাপনাকে middleware হিসেবে অন্তর্ভুক্ত করতে হবে:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
// সেশন middleware যোগ করা
app.UseSession();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
}
app.UseSession()
ব্যবহার করার মাধ্যমে সেশন ম্যানেজমেন্ট চালু হয়, যা রিকোয়েস্টে সেশন ডেটা সংরক্ষণ এবং অ্যাক্সেস করতে সাহায্য করে।
কোনো ভিউ বা কন্ট্রোলার থেকে সেশনে ডেটা সংরক্ষণ করতে পারেন। সেশন ডেটা HttpContext.Session
এর মাধ্যমে সংরক্ষণ এবং পুনরুদ্ধার করা যায়।
public class HomeController : Controller
{
public IActionResult Index()
{
// সেশনে ডেটা সংরক্ষণ
HttpContext.Session.SetString("UserName", "John Doe");
return View();
}
}
এখানে, SetString()
মেথড ব্যবহার করে "UserName" কী দিয়ে একটি স্ট্রিং ডেটা সেশন-এ সংরক্ষণ করা হচ্ছে।
আপনি সেশন থেকে ডেটা পুনরুদ্ধার করতে GetString()
বা অন্যান্য টাইপ-স্পেসিফিক মেথড ব্যবহার করতে পারেন।
public class HomeController : Controller
{
public IActionResult About()
{
// সেশন থেকে ডেটা পুনরুদ্ধার
string userName = HttpContext.Session.GetString("UserName");
if (userName != null)
{
ViewData["Message"] = $"Welcome, {userName}";
}
else
{
ViewData["Message"] = "Welcome, Guest";
}
return View();
}
}
এখানে GetString()
ব্যবহার করে "UserName"
কী থেকে স্ট্রিং ডেটা পুনরুদ্ধার করা হচ্ছে।
ASP.NET Core-এ সেশন শুধুমাত্র স্ট্রিং ডেটা সংরক্ষণ করতে ব্যবহৃত হয় না, আপনি অন্যান্য ডেটা টাইপও সংরক্ষণ করতে পারেন যেমন অ-স্ট্রিং ভ্যালু বা কাস্টম অবজেক্ট।
এনকোডিং এবং ডিকোডিং এর মাধ্যমে সেশন ব্যবহার করা:
public IActionResult SaveData()
{
var userData = new UserData { Id = 1, Name = "John" };
// সেশন-এ কাস্টম অবজেক্ট সংরক্ষণ
HttpContext.Session.SetString("UserData", JsonConvert.SerializeObject(userData));
return View();
}
public IActionResult RetrieveData()
{
var userDataJson = HttpContext.Session.GetString("UserData");
if (userDataJson != null)
{
var userData = JsonConvert.DeserializeObject<UserData>(userDataJson);
ViewData["UserName"] = userData.Name;
}
return View();
}
এখানে JsonConvert.SerializeObject
এবং JsonConvert.DeserializeObject
ব্যবহার করা হয়েছে JSON ফরম্যাটে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার জন্য।
Clear()
মেথড ব্যবহার করে আপনি সেশনের সব ডেটা রিসেট করতে পারেন। অথবা Remove()
মেথড ব্যবহার করে একটি নির্দিষ্ট কী মুছে ফেলতে পারেন।
public IActionResult Logout()
{
// সেশন ডেটা মুছে ফেলতে
HttpContext.Session.Clear(); // সব সেশন ডেটা রিসেট
// নির্দিষ্ট সেশন কী মুছে ফেলতে
HttpContext.Session.Remove("UserName");
return RedirectToAction("Index");
}
ASP.NET Core-এ সেশন ব্যবস্থাপনা ব্যবহারকারী ডেটা সংরক্ষণ এবং অ্যাক্সেসের একটি গুরুত্বপূর্ণ উপায়। সেশন ব্যবস্থাপনা কনফিগার করার পর আপনি সহজেই সেশন ডেটা সংরক্ষণ, পুনরুদ্ধার এবং মুছে ফেলতে পারেন। এটি শপিং কার্ট, ইউজার অথেনটিকেশন এবং সাময়িক ডেটা সংরক্ষণের জন্য অত্যন্ত কার্যকরী।
কুকিজ (Cookies) হলো ছোট ডেটা ফাইল যা ক্লায়েন্টের ব্রাউজারে সংরক্ষণ করা হয় এবং HTTP রিকোয়েস্টের সময় সার্ভারে পাঠানো হয়। ASP.NET Core-এ কুকিজ ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন ডেটা সংরক্ষণ, ইউজার সেশন ম্যানেজমেন্ট এবং কাস্টমাইজড অভিজ্ঞতা প্রদান করা যায়। তবে, কুকিজ ব্যবহারের সময় নিরাপত্তার বিষয়টি অত্যন্ত গুরুত্বপূর্ণ।
ASP.NET Core-এ কুকিজ সেট করতে HttpContext.Response.Cookies.Append() মেথড ব্যবহার করা হয়।
public IActionResult SetCookie()
{
CookieOptions options = new CookieOptions
{
Expires = DateTime.Now.AddMinutes(30) // কুকির মেয়াদ নির্ধারণ
};
Response.Cookies.Append("UserPreference", "DarkMode", options);
return Content("Cookie set successfully!");
}
কুকিজ পড়তে HttpContext.Request.Cookies ব্যবহার করা হয়।
public IActionResult GetCookie()
{
var userPreference = Request.Cookies["UserPreference"];
if (userPreference != null)
{
return Content($"User Preference: {userPreference}");
}
return Content("No cookie found!");
}
কুকিজ মুছে ফেলতে HttpContext.Response.Cookies.Delete() মেথড ব্যবহার করা হয়।
public IActionResult DeleteCookie()
{
Response.Cookies.Delete("UserPreference");
return Content("Cookie deleted successfully!");
}
Startup.cs ফাইলে কুকিজ ব্যবহারের কনফিগারেশন যোগ করা যায়।
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.Strict; // SameSite পলিসি
options.Secure = CookieSecurePolicy.Always; // শুধুমাত্র HTTPS এ কুকিজ পাঠানো
});
}
Middleware ব্যবহার করে কুকিজ পরিচালনা:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCookiePolicy(); // Cookie Policy Middleware
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
কুকিজ ব্যবহারের সময় ডেটার নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। নিচে ASP.NET Core-এ কুকিজ ব্যবহারে নিরাপত্তার জন্য কিছু নির্দেশিকা দেওয়া হলো:
কুকিজ নিরাপদ রাখতে Secure
ফ্ল্যাগ ব্যবহার করে শুধুমাত্র HTTPS রিকোয়েস্টে কুকিজ পাঠানো উচিত।
CookieOptions options = new CookieOptions
{
Secure = true
};
HttpOnly
ফ্ল্যাগ ব্যবহার করে নিশ্চিত করুন যে কুকিজ শুধুমাত্র সার্ভার-সাইড স্ক্রিপ্ট দ্বারা অ্যাক্সেসযোগ্য এবং ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট দ্বারা অ্যাক্সেসযোগ্য নয়।
CookieOptions options = new CookieOptions
{
HttpOnly = true
};
SameSite
পলিসি ব্যবহার করে ক্রস-সাইট রিকোয়েস্ট থেকে কুকিজ রক্ষা করা যায়।
CookieOptions options = new CookieOptions
{
SameSite = SameSiteMode.Strict
};
সেন্সিটিভ ডেটা কুকিজে সংরক্ষণ করার সময় এটি এনক্রিপ্ট করা উচিত।
services.AddDataProtection();
CookieOptions options = new CookieOptions
{
Secure = true,
HttpOnly = true
};
কুকিজের Expires বা Max-Age নির্ধারণ করে সময়সীমা বেঁধে দিন, যেন এটি অনির্দিষ্টকাল ধরে সংরক্ষিত না থাকে।
CookieOptions options = new CookieOptions
{
Expires = DateTime.Now.AddMinutes(30)
};
HttpOnly
এবং Secure
ফ্ল্যাগ ব্যবহারের পাশাপাশি কন্টেন্ট নিরাপত্তা পলিসি (CSP) প্রয়োগ করুন।
কুকিজ ব্যবহারের সময় CSRF প্রতিরোধের জন্য ASP.NET Core-এ বিল্ট-ইন AntiForgeryToken
ব্যবহার করুন।
ASP.NET Core-এ কুকিজ ব্যবহারের মাধ্যমে ইউজার ডেটা সংরক্ষণ এবং সেশন ম্যানেজমেন্ট সহজ হয়। তবে নিরাপত্তার বিষয়গুলো নিশ্চিত করা জরুরি, যেমন HTTPS ব্যবহার, HttpOnly ফ্ল্যাগ প্রয়োগ, এবং SameSite পলিসি অনুসরণ। সঠিক পদ্ধতিতে কুকিজ ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনের ডেটা সুরক্ষা এবং ইউজারের আস্থা নিশ্চিত করা সম্ভব।
TempData হলো একটি বিশেষ ধরনের ডেটা স্টোর যা এক রিকোয়েস্ট থেকে আরেক রিকোয়েস্টে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি সাধারণত এমন তথ্য স্টোর করতে ব্যবহৃত হয় যা এক রিকোয়েস্টের জন্য প্রাসঙ্গিক, যেমন একটি সফল সাবমিশন বা একটি ত্রুটির বার্তা, যা পরবর্তী রিকোয়েস্টে ব্যবহারকারীর কাছে দেখানো হবে।
ASP.NET Core-এ TempData ব্যবহার করা হয় সাধারণত Redirect বা Post-Redirect-Get প্যাটার্নের সময়, যেখানে আপনাকে রিকোয়েস্টের মাঝে কিছু ডেটা পাস করতে হয়, এবং পরবর্তী রিকোয়েস্টে সেই ডেটা প্রয়োজন হয়।
TempData ব্যবহার করতে আপনি Controller এর মধ্যে TempData প্রপার্টি সেট করতে পারেন:
public class HomeController : Controller
{
public IActionResult Index()
{
// TempData তে একটি বার্তা সেট করা
TempData["Message"] = "আপনার নিবন্ধন সফল হয়েছে!";
return RedirectToAction("Success");
}
public IActionResult Success()
{
// TempData থেকে বার্তা নেওয়া
var message = TempData["Message"];
return View((string)message); // Success.cshtml এ বার্তা পাঠানো
}
}
এখানে, TempData["Message"] সেট করা হয়েছে এবং পরবর্তী রিকোয়েস্টে Success অ্যাকশনে সেই বার্তা প্রদর্শিত হবে।
TempData-তে রাখা ডেটা পরবর্তী রিকোয়েস্টে অ্যাক্সেস করা হয় এবং সেগুলি Controller বা View-এ ব্যবহার করা যায়:
@{
// TempData থেকে বার্তা দেখানো হচ্ছে
var message = TempData["Message"] as string;
}
@if (message != null)
{
<div class="alert alert-success">@message</div>
}
এখানে, TempData["Message"] থেকে বার্তা নেওয়া হয়েছে এবং যদি কোন বার্তা থাকে তবে সেটি UI-তে প্রদর্শিত হবে।
public IActionResult Index()
{
TempData["Message"] = "এই বার্তা পরবর্তী রিকোয়েস্টে থাকবে!";
TempData.Keep("Message"); // TempData থেকে বার্তা রাখবে পরবর্তী রিকোয়েস্টে
return RedirectToAction("Success");
}
public IActionResult Success()
{
var message = TempData.Peek("Message");
return View((string)message);
}
এখানে, TempData থেকে মান পড়া হয়েছে এবং সেটি পরবর্তী রিকোয়েস্টের জন্য থাকবে।
TempData সাধারণত Post-Redirect-Get প্যাটার্নে ব্যবহার করা হয়, যেখানে একটি HTTP POST রিকোয়েস্ট থেকে ডেটা পাওয়ার পর ব্যবহারকারীকে একটি HTTP GET রিকোয়েস্টে রিডাইরেক্ট করা হয় এবং সেই সময়ে ডেটা সহ ফলাফল দেখানো হয়।
[HttpPost]
public IActionResult SubmitForm(User user)
{
if (ModelState.IsValid)
{
// TempData সেট করা
TempData["SuccessMessage"] = "ফর্ম সফলভাবে জমা হয়েছে!";
return RedirectToAction("FormSuccess");
}
return View(user);
}
public IActionResult FormSuccess()
{
// TempData থেকে ডেটা নেয়া
var successMessage = TempData["SuccessMessage"];
return View((string)successMessage);
}
এখানে, SubmitForm অ্যাকশনে ফর্ম সাবমিশনের পর ব্যবহারকারীকে FormSuccess অ্যাকশনে রিডাইরেক্ট করা হয়, এবং TempData থেকে একটি সফল বার্তা দেখানো হয়।
ASP.NET Core-এ TempData একটি গুরুত্বপূর্ণ উপাদান, যা রিকোয়েস্টের মধ্যে সাময়িক ডেটা পাস করতে সাহায্য করে। এটি সাধারণত Post-Redirect-Get প্যাটার্নে ব্যবহৃত হয়, যেখানে একটি রিকোয়েস্ট থেকে পরবর্তী রিকোয়েস্টে ডেটা সংরক্ষিত থাকে। TempData ব্যবহার করে সফল অপারেশন, ত্রুটি বার্তা বা অন্য কোনও সাময়িক তথ্য শেয়ার করা যায়, এবং এটি ডেভেলপমেন্ট ও ইউআই ইন্টারঅ্যাকশনের ক্ষেত্রে অত্যন্ত কার্যকর।
common.read_more