簡體   English   中英

使用緩存ASP.NET

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM