【问题标题】:Is it acceptable to store user specific data in C# Runtime MemoryCache?在 C# Runtime MemoryCache 中存储用户特定数据是否可以接受?
【发布时间】:2015-01-25 15:21:40
【问题描述】:

在我的 asp.net MVC 应用程序中,每个页面都包含大量很少更改的数据,但仍然是特定于用户的,不应该在其他用户之间共享。

我找不到处理每个用户缓存的服务器端解决方案,所以我的想法是只使用“标准”内存缓存并将用户 ID 用作键的一部分。

这可以接受吗? 我是否遗漏了一些安全风险?

谢谢

编辑:(添加细节)

它是最初存储在数据库中的数据,例如,我有一个针对产品类别的定制下拉列表(使用 AJAX 检索并返回一个 jsonresult)。我希望能够手动清除缓存,以防用户通过设置添加类别并且我需要检索“新”类别列表。据我所知,我无法使用 OutputCache 手动清除缓存。我也有一个场景,我想每分钟刷新某些缓存项(对于用户屏幕上的一些更新)。

【问题讨论】:

  • 您愿意丢失数据吗?
  • 你试过OutputCache了吗?您可以实现 VarByCustom 属性
  • 它是最初存储在数据库中的数据,例如,我有一个针对产品类别的定制下拉列表(使用 AJAX 检索)。我希望能够手动清除缓存,以防用户通过设置添加类别并且我需要检索“新”类别列表。据我所知,我无法使用 OutputCache 手动清除缓存。

标签: c# asp.net-mvc security caching


【解决方案1】:

使用 OutputCache 注释您的操作,并确保该操作仅用于授权访问。

[Authorized, OutputCache(VaryByCustom = "USER")]
public ActionResult SlowAction() { }

然后在 Global.asax.cs 中覆盖 'VaryByCustom' 处理程序

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    switch (custom)
    {
        case "USER":
            return context.User.Identity.Name;
        default:
            return null;
    }
}

【讨论】:

  • 如果我可以将输出缓存用于其他目的,我会看看它,但我认为输出缓存不符合关于手动清除等的全部要求,我在上面更新了我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 2013-07-12
  • 2010-11-03
  • 2010-10-06
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多