簡體   English   中英

啟用 OutputCache 時會話丟失

[英]Session gets lost when enabling OutputCache

我有一個(工作)MVC 應用程序,它在多個部分使用會話屬性:

return httpContext.Session[SPContextKey] as SharePointAcsContext;

(忽略這是共享點;此問題不是特定於 SP 的)

這工作正常,直到我嘗試啟用輸出緩存:

[OutputCache (Duration =600)]
public ActionResult Select() {
  DoSelect();
}

當內容被緩存時,httpContext.Session 變為 NULL。

有沒有辦法保留會話數據並使用緩存?

我自己找到了解決方案。 我花了一段時間才得出結論 - 如果數據被緩存 -根本不應該運行任何單獨的代碼 因為這應該是緩存的主要目的:當數據被兌現時不要運行任何代碼。

這讓我得出結論,導致問題的代碼必須在緩存之前運行。 所以“壞男孩”很容易找到。 當緩存應用但無法訪問會話時,代碼中 OutputCache-Attribute之前的另一個屬性(在本例中為 AuthorizeAttribute)仍在運行:

[Route("{id}")]
[UserAuth(Roles =Directory.GroupUser)]
[JsonException]
[OutputCache(Duration = 600)]
public ActionResult Select()
{
  DoSelect();
}

將 UserAuth-Attribute 置於 OutputCache-Attribute 之下解決了問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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