ذخیره کلاس در یک cookie
سلام
فرض کنید کلاس زیر را داریم
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
}
فرض کنید وقتی اطلاعات را از جدول مورد نظرمیخوانیم حدود100 ردیف
چگونه می توانم لیست کلاس فوق را در یک cookie ذخیره و بازخوانی کنم
باتشکر
11 پاسخ
سلام
الف)حدود 100 ردیف رکورد است
ب)بعد چگونه می توانم ایتم مورد نظرم را بخوانم
برای اینکار که هر دفعه نرم از جدول بانک اطلاعاتی بخونم باید چکارکنم پس
اگر اطلاعات به ازای هر کاربر متفاوت هست از Session استفاده کنید. مشکلی ایجاد نمیکنه. فیلدها و خصوصیت های static برای زمانی هست که اطلاعات بین Session های مختلف مشترک هست.
میشه یک نمونه ساده قرار بدهید
درضمن چون تعدادی کاربران آنلاین وصل میشوند مشکلی بوجود نمیاید
سلام
یعنی سشن اصلا استفاده نکنم برای اینکار
این حجم از اطلاعات مشکلی برای شما ایجاد نمیکنه. اگر اطلاعات تغییر نمیکنه و ثابت هست، شما اطلاعات رو داخل یک فیلد static ذخیره کنید. فیلد های static بین همه Session ها مشترک هست.
خیر، redis یک سرویس کش هست که روی ویندوز نصب میشه و بعد می تونید از redis داخل mvc هم استفاده کنید. این لینک رو مطالعه کنید تا بیشتر با این موضوع آشنا بشید. تو گوگل هم سرچ کنید ASP.NET MVC Redis لینک های متعددی میاره براتون.
فیلد ها و خصوصیت های static بین همه session ها مشترک هستن و به همین خاطر باید با دقت استفاده بشن. فرض کنید تعدادی رکورد دارید که میخوایید جایی قرار بگیره که این رکورد ها به ندرت تغییر می کنن یا اطلاعات رکورد ها بین همه کاربرها مشترک هست. شما کافیه یک کلاس تعریف کنید و داخلش یک خصوصیت static تعریف کنید:
public static class SharedData
{
public static List<Person> People { get; set; } = new List<Person>();
}
حالا شما این اطلاعات رو یکبار پر می کنید، مثلاً داخل Application__Start:
public void Application_Start()
{
foreach(var item in dbContext.People)
{
SharedData.People.Add(item);
}
}
حالا هر جای برنامه نیاز داشتید می تونید از این اطلاعات استفاده کنید:
var person = SharedData.People.FirstOrDefault(p => p.Id = 12);
اگر اطلاعات جدول تغییر کرد این خصوصیت رو به روز رسانی کنید با اطلاعات جدید. راه کارهای دیگه ای هم هست، مثل استفاده از Redis که خیلی قدرتمنده، اما باید مطالعه بشه و یاد بگیرید استفاده از redis رو که تو یک یا چند خط نمیشه redis رو توضیح داد.
شما این مقدار رو نمیتونید داخل کوکی ذخیره کنید. ماکزیمم حجم کوکی 4093 بایت هست که جواب گوی شما برای 100 ردیف رکورد نیست.
سلام، وقت بخیر
شما می تونید کلاس رو به صورت json تبدیل کنید و در قالب کوکی ذخیره کنید. برای اینکار می تونید از newton soft استفاده کنید:
var json = JsonConvert.SerializeObject(myobj);
Response.Cookies.Add(new HttpCookie("mycookie", json));
فقط دقت کنید که طول رشته برای کوکی محدود هست و نباید رشته های طولانی رو ذخیره کنید.
سلام
Redis مبروط به mvc هست لینکی دارید معرفی کنید
نظرتان در مورد استفاده از سشن چیست