eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
121 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
کوکی‌ها (Cookies) فایل‌های کوچکی هستند که در مرورگر کاربران ذخیره می‌شوند و به وب‌سایت‌ها اجازه می‌دهند تا اطلاعاتی مانند تنظیمات کاربر، سشن‌ها، و اطلاعات دیگر را نگهداری کنند. در پروژه‌های ASP.NET Core، کوکی‌ها به طور گسترده برای مدیریت سشن‌ها، احراز هویت، و نگهداری اطلاعات تنظیمات کاربر استفاده می‌شوند. استفاده از کوکی‌ها در ASP.NET Core بیایید با جزئیات بیشتری به نحوه استفاده از کوکی‌ها در ASP.NET Core بپردازیم: 1. ذخیره‌سازی کوکی برای ذخیره‌سازی کوکی در ASP.NET Core، می‌توانید از متد HttpContext.Response.Cookies.Append استفاده کنید. مثال: csharp public IActionResult SetCookie() { // ایجاد و ذخیره‌سازی کوکی HttpContext.Response.Cookies.Append("MyCookie", "CookieValue", new CookieOptions { Expires = DateTime.Now.AddDays(7) // تنظیم تاریخ انقضا }); return Ok("Cookie has been set"); } 2. خواندن کوکی برای خواندن کوکی از درخواست کاربر، می‌توانید از متد HttpContext.Request.Cookies استفاده کنید. مثال: csharp public IActionResult GetCookie() { // خواندن کوکی if (HttpContext.Request.Cookies.TryGetValue("MyCookie", out string cookieValue)) { return Ok($"Cookie Value: {cookieValue}"); } return NotFound("Cookie not found"); } 3. حذف کوکی برای حذف کوکی، می‌توانید از متد HttpContext.Response.Cookies.Delete استفاده کنید. مثال: csharp public IActionResult DeleteCookie() { // حذف کوکی HttpContext.Response.Cookies.Delete("MyCookie"); return Ok("Cookie has been deleted"); } استفاده از کوکی‌ها برای احراز هویت ASP.NET Core از کوکی‌ها برای مدیریت احراز هویت کاربران استفاده می‌کند. شما می‌توانید از سرویس‌های Identity و Authentication برای مدیریت این کار استفاده کنید. پیکربندی احراز هویت کوکی ابتدا باید سرویس احراز هویت کوکی را در متد ConfigureServices در Startup.cs پیکربندی کنید. مثال: csharp public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Account/Login"; options.LogoutPath = "/Account/Logout"; options.AccessDeniedPath = "/Account/AccessDenied"; }); services.AddControllersWithViews(); } استفاده از احراز هویت کوکی سپس می‌توانید از احراز هویت کوکی برای لاگین و لاگ‌آوت کاربران استفاده کنید. مثال لاگین: csharp public async Task<IActionResult> Login(LoginViewModel model) { if (ModelState.IsValid) { var claims = new List<Claim> { new Claim(ClaimTypes.Name, model.Username), new Claim("FullName", model.FullName), new Claim(ClaimTypes.Role, "Administrator") }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties { IsPersistent = model.RememberMe }; await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return RedirectToAction("Index", "Home"); } return View(model); } مثال لاگ‌آوت: csharp public async Task<IActionResult> Logout() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return RedirectToAction("Index", "Home"); } نتیجه‌گیری کوکی‌ها ابزار قدرتمندی برای مدیریت سشن‌ها، احراز هویت و نگهداری اطلاعات کاربر در وب‌سایت‌ها هستند. با استفاده از ASP.NET Core می‌توانید به راحتی کوکی‌ها را ذخیره، خواندن، و حذف کنید و همچنین از آن‌ها برای احراز هویت کاربران استفاده کنید.
تحلیل کد csharp public IActionResult Index() { Response.Cookies.Append("Message", "welcome", new CookieOptions { HttpOnly = true, Secure = Request.IsHttps, Path = Request.PathBase.HasValue ? Request.PathBase.ToString() : "/", Expires = DateTime.Now.AddDays(5), }); return View(); } توضیحات خط به خط کد: public IActionResult Index(): این متد یک اکشن در کنترلر است که زمانی که درخواست به مسیر مربوطه (مثلاً /Home/Index) ارسال می‌شود، اجرا می‌شود. Response.Cookies.Append("Message", "welcome", new CookieOptions { ... }): این خط یک کوکی جدید به نام Message با مقدار welcome ایجاد و به پاسخ (Response) اضافه می‌کند. CookieOptions: HttpOnly = true: این گزینه تعیین می‌کند که کوکی فقط از طریق HTTP قابل دسترسی است و از طریق جاوااسکریپت قابل دسترسی نیست. این ویژگی به افزایش امنیت کوکی کمک می‌کند. Secure = Request.IsHttps: این گزینه تعیین می‌کند که کوکی فقط در ارتباطات امن (HTTPS) ارسال شود. اگر درخواست (Request) از طریق HTTPS باشد، این مقدار true خواهد بود. Path = Request.PathBase.HasValue ? Request.PathBase.ToString() : "/": این گزینه مسیر کوکی را تعیین می‌کند. اگر PathBase موجود باشد، از آن استفاده می‌شود؛ در غیر این صورت مسیر ریشه (/) استفاده می‌شود. Expires = DateTime.Now.AddDays(5): این گزینه تعیین می‌کند که کوکی تا پنج روز معتبر باشد. پس از پنج روز، کوکی منقضی می‌شود. return View(): این خط تعیین می‌کند که اکشن به نمای (View) مربوطه پاسخ دهد و صفحه وب مورد نظر نمایش داده شود. قسمت بازرسی (Inspect) در مرورگر - بخش Storage برای مشاهده و بررسی کوکی‌ها در مرورگر، می‌توانید از ابزارهای توسعه‌دهنده (Developer Tools) استفاده کنید. در زیر به توضیحات بخش‌های مختلف مربوط به کوکی‌ها در قسمت Storage می‌پردازیم: Name: نام کوکی، در اینجا Message. Value: مقدار کوکی، در اینجا welcome. Domain: دامنه‌ای که کوکی برای آن تنظیم شده است. به طور پیش‌فرض، دامنه سایت فعلی است. Path: مسیری که کوکی برای آن تنظیم شده است. در این مثال، مسیر تعیین شده بر اساس Request.PathBase یا ریشه / است. Expires / Max-Age: تاریخ انقضای کوکی، که در اینجا پنج روز پس از زمان فعلی تنظیم شده است. Size: اندازه کوکی بر حسب بایت. HttpOnly: نشان‌دهنده این است که کوکی فقط از طریق HTTP قابل دسترسی است و از طریق جاوااسکریپت قابل دسترسی نیست. Secure: نشان‌دهنده این است که کوکی فقط در ارتباطات امن (HTTPS) ارسال می‌شود. SameSite: تعیین می‌کند که آیا کوکی تنها در درخواست‌های یکسان ارسال شود یا خیر. در این مثال، این ویژگی تنظیم نشده است.
در مورد کوکی‌ها و Session در وب‌سایت‌ها، باید بدانید که کوکی‌ها برای ذخیره اطلاعات در سمت کلاینت (مرورگر) استفاده می‌شوند، در حالی که Sessionها برای ذخیره اطلاعات در سمت سرور استفاده می‌شوند. در این مورد، کوکی‌های مربوط به Session برای نگهداری شناسه Session استفاده می‌شوند که به سرور اجازه می‌دهد تا اطلاعات مرتبط با کاربر را بازیابی کند. نحوه ایجاد و تنظیم زمان انقضای کوکی در ASP.NET Core برای ایجاد و تنظیم زمان انقضای کوکی در ASP.NET Core می‌توانید از کد زیر استفاده کنید: csharp public IActionResult Index() { Response.Cookies.Append("SessionCookie", "SessionValue", new CookieOptions { HttpOnly = true, // تعیین این که کوکی فقط از طریق HTTP قابل دسترسی باشد Secure = Request.IsHttps, // تنظیم این که کوکی فقط در ارتباطات HTTPS ارسال شود Path = Request.PathBase.HasValue ? Request.PathBase.ToString() : "/", // تعیین مسیر کوکی Expires = DateTime.Now.AddMinutes(30) // تنظیم تاریخ انقضا برای 30 دقیقه }); return View(); } توضیحات در مورد کد نام کوکی (SessionCookie): نام کوکی که برای نگهداری شناسه Session یا اطلاعات دیگر استفاده می‌شود. مقدار کوکی (SessionValue): مقداری که در کوکی ذخیره می‌شود. HttpOnly: این گزینه تعیین می‌کند که کوکی فقط از طریق HTTP قابل دسترسی باشد و از طریق جاوااسکریپت قابل دسترسی نباشد، که این ویژگی به افزایش امنیت کوکی کمک می‌کند. Secure: این گزینه تعیین می‌کند که کوکی فقط در ارتباطات امن (HTTPS) ارسال شود. اگر درخواست (Request) از طریق HTTPS باشد، این مقدار true خواهد بود. Path: این گزینه مسیر کوکی را تعیین می‌کند. اگر PathBase موجود باشد، از آن استفاده می‌شود؛ در غیر این صورت مسیر ریشه (/) استفاده می‌شود. Expires: این گزینه تعیین می‌کند که کوکی تا 30 دقیقه معتبر باشد. پس از 30 دقیقه، کوکی منقضی می‌شود. مشاهده کوکی‌ها در بخش Storage برای مشاهده کوکی‌ها در مرورگر، می‌توانید از ابزارهای توسعه‌دهنده (Developer Tools) استفاده کنید. مراحل به شرح زیر است: باز کردن ابزارهای توسعه‌دهنده: در مرورگر (مثلاً Google Chrome)، کلیدهای F12 یا Ctrl+Shift+I را فشار دهید تا ابزارهای توسعه‌دهنده باز شوند. بخش Application: در پنجره ابزارهای توسعه‌دهنده، به تب Application بروید. بخش Storage: در پنل سمت چپ، به بخش Storage بروید و گزینه Cookies را باز کنید. سپس دامنه سایت خود را انتخاب کنید. مشاهده کوکی‌ها: در اینجا می‌توانید کوکی‌های ذخیره شده را مشاهده کنید. ستون‌های مختلفی مانند Name, Value, Domain, Path, Expires, Size, HttpOnly, Secure و SameSite وجود دارند که اطلاعات مربوط به هر کوکی را نمایش می‌دهند. این ابزارها به شما کمک می‌کنند تا کوکی‌ها را به راحتی مدیریت و بررسی کنید.
بیایید این کد را به طور دقیق بررسی کنیم و توضیح دهیم که هر بخش چه کاری انجام می‌دهد: csharp public IActionResult Read() { string cookieValue; if (Request.Cookies.TryGetValue("Message1", out cookieValue)) { // اگر کوکی با نام "Message1" پیدا شود، مقدار آن در متغیر cookieValue ذخیره می‌شود } else { // اگر کوکی با نام "Message1" پیدا نشود، مقدار "کوکی یافت نشد" در متغیر cookieValue قرار می‌گیرد cookieValue = "کوکی یافت نشد"; } return Ok(cookieValue); // نتیجه به صورت یک پاسخ HTTP با وضعیت OK برگردانده می‌شود که شامل مقدار کوکی یا پیغام "کوکی یافت نشد" است } توضیحات: public IActionResult Read(): این خط متد Read را تعریف می‌کند که یک اکشن در کنترلر است و وقتی فراخوانی شود، مقدار کوکی را بررسی و بازمی‌گرداند. string cookieValue;: این خط یک متغیر رشته‌ای به نام cookieValue تعریف می‌کند که مقدار کوکی را ذخیره خواهد کرد. if (Request.Cookies.TryGetValue("Message1", out cookieValue)): این شرط بررسی می‌کند که آیا کوکی با نام "Message1" در درخواست فعلی وجود دارد یا خیر. Request.Cookies.TryGetValue("Message1", out cookieValue): اگر کوکی با نام "Message1" پیدا شود، مقدار آن در متغیر cookieValue ذخیره می‌شود و شرط if به true ارزیابی می‌شود. اگر کوکی با نام "Message1" پیدا نشود، شرط if به false ارزیابی می‌شود. else: اگر شرط if به false ارزیابی شود (کوکی با نام "Message1" پیدا نشود)، بخش else اجرا می‌شود. cookieValue = "کوکی یافت نشد";: اگر کوکی پیدا نشود، مقدار "کوکی یافت نشد" به متغیر cookieValue اختصاص داده می‌شود. return Ok(cookieValue);: متد مقدار cookieValue را به صورت یک پاسخ HTTP با وضعیت OK برمی‌گرداند. این پاسخ می‌تواند شامل مقدار کوکی یا پیغام "کوکی یافت نشد" باشد. نتیجه‌گیری این کد بررسی می‌کند که آیا کوکی با نام "Message1" در درخواست فعلی وجود دارد یا خیر. اگر کوکی وجود داشته باشد، مقدار آن را بازمی‌گرداند؛ در غیر این صورت، پیغام "کوکی یافت نشد" را بازمی‌گرداند. این کد برای نمایش مقدار کوکی به کاربر یا اطلاع‌رسانی در مورد عدم وجود کوکی مفید است.
اضافه کردن سبد خرید به پروژه یکی از ویژگی‌های بسیار متداول و مهم در فروشگاه‌های آنلاین است. ذخیره‌سازی سبد خرید در سمت کلاینت و سپس انتقال آن به سرور هنگام تکمیل خرید یک روش موثر برای کاهش بار سرور و افزایش کارایی برنامه است. بیایید یک روش ساده برای پیاده‌سازی این فرآیند را بررسی کنیم. مرحله 1: ذخیره‌سازی سبد خرید در سمت کلاینت می‌توانید از کوکی‌ها یا Local Storage برای ذخیره‌سازی سبد خرید در سمت کلاینت استفاده کنید. Local Storage برای داده‌های بیشتری نسبت به کوکی‌ها مناسب‌تر است. مثال با استفاده از Local Storage: javascript // افزودن آیتم به سبد خرید function addToCart(product) { let cart = JSON.parse(localStorage.getItem('shoppingCart')) || []; cart.push(product); localStorage.setItem('shoppingCart', JSON.stringify(cart)); } // دریافت سبد خرید function getCart() { return JSON.parse(localStorage.getItem('shoppingCart')) || []; } // حذف آیتم از سبد خرید function removeFromCart(productId) { let cart = JSON.parse(localStorage.getItem('shoppingCart')) || []; cart = cart.filter(item => item.id !== productId); localStorage.setItem('shoppingCart', JSON.stringify(cart)); } مرحله 2: نمایش سبد خرید در سمت کلاینت می‌توانید از جاوااسکریپت برای نمایش سبد خرید در صفحه وب استفاده کنید. مثال: javascript function displayCart() { let cart = getCart(); let cartHtml = ''; cart.forEach(item => { cartHtml +=
<div>${item.name} - ${item.price}</div>
; }); document.getElementById('cart').innerHTML = cartHtml; } // فراخوانی تابع نمایش سبد خرید هنگام بارگذاری صفحه window.onload = displayCart; مرحله 3: ارسال سبد خرید به سرور هنگام تکمیل خرید وقتی کاربر خرید خود را کامل کرد، سبد خرید را به سرور ارسال کنید تا در پایگاه داده ذخیره شود. مثال با استفاده از Fetch API: javascript async function completePurchase() { let cart = getCart(); let response = await fetch('/api/completePurchase', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(cart) }); if (response.ok) { // خرید با موفقیت انجام شد localStorage.removeItem('shoppingCart'); // پاک کردن سبد خرید } else { // مدیریت خطا console.error('Error completing purchase'); } } مرحله 4: دریافت و ذخیره‌سازی سبد خرید در سرور (ASP.NET Core) سمت سرور باید یک اکشن برای دریافت و ذخیره‌سازی سبد خرید فراهم کند. مثال در ASP.NET Core: csharp [HttpPost] [Route("api/completePurchase")] public IActionResult CompletePurchase([FromBody] List<Product> cart) { // ذخیره‌سازی سبد خرید در پایگاه داده // این قسمت به صورت تمثیلی است و بستگی به نیازهای پروژه شما دارد foreach (var product in cart) { _context.Orders.Add(new Order { ProductId = product.Id, Quantity = product.Quantity, Price = product.Price, OrderDate = DateTime.Now }); } _context.SaveChanges(); return Ok("Purchase completed successfully"); } نتیجه‌گیری این روش به شما امکان می‌دهد تا سبد خرید را در سمت کلاینت نگه دارید و بار سرور را کاهش دهید. وقتی کاربر خرید خود را تکمیل کرد، سبد خرید به سرور ارسال می‌شود تا در پایگاه داده ذخیره شود. این روش کارایی و عملکرد برنامه را بهبود می‌بخشد.
رمزگذاری پسوردها در برنامه‌های وب بسیار مهم است تا از امنیت کاربران و اطلاعات آن‌ها محافظت شود. استفاده از الگوریتم‌های رمزنگاری مطمئن به جلوگیری از دسترسی غیرمجاز به پسوردها کمک می‌کند. در ASP.NET Core، می‌توانید از کتابخانه‌های استاندارد برای رمزگذاری پسوردها استفاده کنید. بیایید یک روش ساده برای انجام این کار را بررسی کنیم. 1. استفاده از ASP.NET Core Identity ASP.NET Core Identity شامل ابزارها و سرویس‌هایی برای مدیریت کاربران و رمزگذاری پسوردها است. در اینجا نحوه پیکربندی و استفاده از آن آورده شده است. نصب ASP.NET Core Identity: ابتدا باید بسته‌های مورد نیاز را به پروژه خود اضافه کنید. می‌توانید این کار را از طریق NuGet Package Manager انجام دهید: Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.SqlServer پیکربندی ASP.NET Core Identity: سپس باید Identity را در متد ConfigureServices در Startup.cs پیکربندی کنید: csharp public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<IdentityUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddControllersWithViews(); } 2. ایجاد مدل کاربر و دیتابیس ایجاد مدل کاربر و دیتابیس با استفاده از Entity Framework Core و ASP.NET Core Identity. csharp public class ApplicationDbContext : IdentityDbContext<IdentityUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } } 3. استفاده از UserManager برای مدیریت کاربران و رمزگذاری پسوردها استفاده از UserManager برای ایجاد کاربران و رمزگذاری پسوردها. ایجاد کاربر جدید: csharp public async Task<IActionResult> Register(string username, string password) { var user = new IdentityUser { UserName = username }; var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { return Ok("User created successfully"); } else { return BadRequest("Failed to create user"); } } 4. استفاده از PasswordHasher به صورت مستقل اگر نمی‌خواهید از ASP.NET Core Identity استفاده کنید، می‌توانید از PasswordHasher به صورت مستقل برای رمزگذاری پسوردها استفاده کنید. مثال مستقل: csharp public class PasswordService { private readonly IPasswordHasher<IdentityUser> _passwordHasher; public PasswordService() { _passwordHasher = new PasswordHasher<IdentityUser>(); } public string HashPassword(string password) { var user = new IdentityUser(); return _passwordHasher.HashPassword(user, password); } public bool VerifyPassword(string hashedPassword, string providedPassword) { var user = new IdentityUser(); var result = _passwordHasher.VerifyHashedPassword(user, hashedPassword, providedPassword); return result == PasswordVerificationResult.Success; } } // استفاده از PasswordService برای رمزگذاری و اعتبارسنجی پسوردها var passwordService = new PasswordService(); string hashedPassword = passwordService.HashPassword("MySecurePassword"); bool isPasswordValid = passwordService.VerifyPassword(hashedPassword, "MySecurePassword"); نتیجه‌گیری رمزگذاری پسوردها و ذخیره آن‌ها در دیتابیس به امنیت کاربران و اطلاعات آن‌ها کمک می‌کند. ASP.NET Core Identity ابزارهای قدرتمندی برای مدیریت کاربران و رمزگذاری پسوردها فراهم می‌کند، اما شما می‌توانید از PasswordHasher به صورت مستقل نیز استفاده کنید.
ذخیره اطلاعات لاگین در کوکی مرورگر یکی از روش‌های معمول برای مدیریت سشن‌های کاربر است. با این حال، باید با احتیاط این کار را انجام دهید تا امنیت اطلاعات کاربر حفظ شود. بیایید به نحوه انجام این کار در ASP.NET Core بپردازیم. مرحله 1: ایجاد و ذخیره‌سازی کوکی لاگین می‌توانید اطلاعات لاگین کاربر را پس از احراز هویت در کوکی مرورگر ذخیره کنید. برای این کار می‌توانید از متد SignInAsync استفاده کنید. مثال: csharp public async Task<IActionResult> Login(string username, string password) { // اعتبارسنجی کاربر var user = await _userManager.FindByNameAsync(username); if (user != null && await _userManager.CheckPasswordAsync(user, password)) { // ایجاد لیست کلایم‌ها (Claims) var claims = new List<Claim> { new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.NameIdentifier, user.Id), }; // ایجاد هویت کلایم (ClaimsIdentity) var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); // گزینه‌های احراز هویت var authProperties = new AuthenticationProperties { IsPersistent = true, // کوکی پایدار باشد ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30) // تنظیم تاریخ انقضای کوکی }; // ورود به سیستم و ایجاد کوکی await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return RedirectToAction("Index", "Home"); } // بازگشت به صفحه لاگین در صورت عدم موفقیت در احراز هویت return View("Login"); } مرحله 2: پیکربندی احراز هویت کوکی در Startup.cs باید احراز هویت کوکی را در متدهای ConfigureServices و Configure پیکربندی کنید. ConfigureServices: csharp public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Account/Login"; // مسیر صفحه لاگین options.LogoutPath = "/Account/Logout"; // مسیر صفحه لاگ‌آوت options.AccessDeniedPath = "/Account/AccessDenied"; // مسیر صفحه دسترسی ممنوع }); services.AddControllersWithViews(); } Configure: csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); // استفاده از میان‌افزار احراز هویت app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); } مرحله 3: مدیریت لاگ‌آوت برای حذف کوکی و خروج کاربر از سیستم، می‌توانید از متد SignOutAsync استفاده کنید. مثال لاگ‌آوت: csharp public async Task<IActionResult> Logout() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return RedirectToAction("Index", "Home"); } امنیت کوکی برای اطمینان از امنیت کوکی‌ها، مطمئن شوید که از گزینه‌های زیر استفاده می‌کنید: HttpOnly: کوکی‌ها را به گونه‌ای تنظیم کنید که فقط از طریق HTTP قابل دسترسی باشند و جاوااسکریپت نتواند به آن‌ها دسترسی پیدا کند. Secure: کوکی‌ها را به گونه‌ای تنظیم کنید که فقط در ارتباطات HTTPS ارسال شوند. SameSite: از ویژگی SameSite برای جلوگیری از ارسال کوکی‌ها در درخواست‌های متقاطع استفاده کنید. نتیجه‌گیری با استفاده از روش‌های بالا، می‌توانید اطلاعات لاگین کاربران را به صورت امن در کوکی مرورگر ذخیره و مدیریت کنید. این کار به شما کمک می‌کند تا سشن‌های کاربران را مدیریت کرده و تجربه کاربری بهتری فراهم کنید.
من دو تا قالب های HTML رایگان پیدا کردم قالب فروشگاه و قالب ادمین که در پروژه ASP.NET Core هفته بعد شروع به کد نویسی می کنیم
قالب های رایگان html فروشگاه و ادمین