我有一个持有用户有效许可证的类,每15分钟就会“验证”一次,以确保当前许可证有效并添加/删除任何可能已更改的许可证。
目前,这是在我的ApplicationController中访问的,ApplicationController是应用程序中的每个其他控制器继承的,因此每当用户执行任何操作时,它都会确保他们拥有有效的许可/权限。
许可模式:
public class LicenseModel
{
public DateTime LastValidated { get; set; }
public List<License> ValidLicenses { get; set; }
public bool NeedsValidation
{
get{ return ((DateTime.Now - this.LastValidated).Minutes >= 15);}
}
//Constructor etc...
}
验证过程: (发生在ApplicationController的Initialize()方法内)
LicenseModel licenseInformation = new LicenseModel();
if (Session["License"] != null)
{
licenseInformation = Session["License"] as LicenseModel;
if (licenseInformation.NeedsValidation)
licenseInformation.ValidLicenses = Service.GetLicenses();
licenseInformation.LastValidated = DateTime.Now;
Session["License"] = licenseInformation;
}
else
{
licenseInformation = new LicenseModel(Service.GetLicenses());
Session["License"] = licenseInformation;
}
要点:
正如您所看到的,此过程当前使用Session来存储LicenseModel,但是我想知道使用Cache存储它是否更容易/更有效。 (或者可能是OutputCache?)以及我如何实现它。
答案 0 :(得分:1)
如果许可证在应用程序范围内使用并且不是特定于任何用户会话,则缓存肯定会更有意义。缓存可以为您处理15分钟的到期,您将不再需要LicenseModel类上的NeedsValidation或LastValidated属性。您可以将所有模型一起取消,只需存储有效许可证列表,如下所示:
if (HttpContext.Cache["License"] == null)
{
HttpContext.Cache.Insert("License",Service.GetLicenses(), null,
DateTime.Now.AddMinutes(15), Cache.NoSlidingExpiration);
}
var licenses = HttpContext.Cache["License"] as List<License>;