【问题标题】: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 之下解决了问题

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2012-05-09
    • 2012-06-03
    相关资源
    最近更新 更多