[英]Using Cache ASP.NET
如何在ASP.NET中使用所有用戶都可以訪問的緩存,而不僅僅是特定的用戶上下文,同時當用戶關閉瀏覽器窗口或過期(如會話對象)時自動刪除此緩存的特定鍵嗎?
緩存可供所有用戶使用,您可以將其設置為在一段時間后過期:
Cache.Insert("key", myTimeSensitiveData, null,
DateTime.Now.AddMinutes(1), TimeSpan.Zero);
您可以通過實現global.asax的會話結束事件,在會話過期時刪除緩存條目
void Session_End(Object sender, EventArgs E)
{
Cache.Remove("MyData1");
}
見這對緩存的詳細信息
編輯:關於您在用戶關閉瀏覽器時如何反應的問題,我認為這並不簡單。 您可以在客戶端嘗試使用javascript處理“卸載”事件,但這不可靠,因為瀏覽器/客戶端可能會崩潰。 在我看來,“心跳”方法會奏效,但需要更多的努力。 有關更多信息,請參見此問題 。
您必須使用Session_OnEnd()事件從緩存中刪除該項目。 但是,如果用戶只是關閉瀏覽器,則不會觸發此事件。 該事件僅在會話超時時觸發。 您可能應該添加檢查以查看該項目是否已被刪除:
public void Session_OnEnd()
{
// You need some identifier unique to the user's session
if (Cache["userID"] != null)
Cache.Remove("userID");
}
另外,如果您希望緩存中的項目在用戶會話期間保持活動狀態,則需要對該項目使用滑動到期時間,並在每次請求時刷新它。 我在OnActionExecuted(僅限ASP.NET MVC)中執行此操作。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Put object back in cache in part to update any changes
// but also to update the sliding expiration
filterContext.HttpContext.Cache.Insert("userID", myObject, null, Cache.NoAbsoluteExpiration,
TimeSpan.FromMinutes(20), CacheItemPriority.Normal, null);
base.OnActionExecuted(filterContext);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.