【问题标题】:Session gets lost when enabling OutputCache启用 OutputCache 时会话丢失
【发布时间】:2016-07-09 18:15:04
【问题描述】:
我有一个(工作的)MVC 应用程序,它在多个部分上使用 Session 属性:
return httpContext.Session[SPContextKey] as SharePointAcsContext;
(忽略这是共享点;此问题不是特定于 SP 的)
这工作正常,直到我尝试启用输出缓存:
[OutputCache (Duration =600)]
public ActionResult Select() {
DoSelect();
}
当内容被缓存时,httpContext.Session 变为 NULL。
有没有办法保留 Session 数据并同时使用缓存?
【问题讨论】:
标签:
c#
asp.net-mvc
session
caching
asp.net-mvc-5
【解决方案1】:
我自己找到了解决方案。我花了一段时间才得出结论 - 如果数据被缓存 - 根本不应该有任何单独的代码在运行。因为这应该是缓存的主要目的:数据兑现时不要运行任何代码。
这使我得出结论,导致问题的代码必须在缓存之前运行。所以“坏男孩”很容易被发现。另一个属性(在本例中为 AuthorizeAttribute)在代码中的 OutputCache-Attribute 在应用缓存但无法访问 Session 时仍然运行:
[Route("{id}")]
[UserAuth(Roles =Directory.GroupUser)]
[JsonException]
[OutputCache(Duration = 600)]
public ActionResult Select()
{
DoSelect();
}
将 UserAuth-Attribute 置于 OutputCache-Attribute 之下解决了问题