【问题标题】:What is the best way to cache a custom IPrincipal for a asp.net mvc website?为 asp.net mvc 网站缓存自定义 IPrincipal 的最佳方法是什么?
【发布时间】:2011-06-14 02:25:30
【问题描述】:

我已经实现了我在

中设置的自定义 IPrincipal
 protected void Application_PostAuthenticateRequest(Object sender, EventArgs args)

通过做

Context.User = GetCustomPrincipal(User.Identity);
Thread.CurrentPrincipal = Context.User;

但我的自定义主体会访问数据库并获取有关用户的自定义信息。我不希望它为每个请求重复访问数据库。

缓存它的最佳方法是什么? 我正在考虑将它存储在 Session 中,这是个好主意吗?

编辑:愚蠢的我。会话在这种方法中甚至不可用,应该在发布问题之前进行测试。

但问题仍然存在..

【问题讨论】:

标签: c# asp.net-mvc session iprincipal


【解决方案1】:

标准方法是将数据存储在 auth cookie 中。如果您不使用 cookie,则可以将数据存储在 session 中。

【讨论】:

  • 饼干!?这不是一个好主意。这是关于用户的私人数据,因此不应该在客户端。
  • @sylon - auth cookie 已加密。您也不必存储主体本身,只需存储您需要重建它的数据,而无需进入数据库。
  • 是的,但其中一些数据是私有的。就像用户在我的站点的自定义角色模型中所属的角色以及有关用户的一堆信息一样。我在 cookie 中保留的唯一内容是身份验证令牌和语言首选项等首选项。
  • @sylon 如果有人能够解密 cookie,他们也可以加密一个。这是一个更大的安全风险,因为用户可以随时为任何用户简单地伪造登录 cookie。
  • 在客户端存储私人数据总是有风险的。 今天对其进行加密可能会使其安全,但如果明天发现新的漏洞(例如this one),您的私人数据突然不再是私人的,并且您的系统容易被利用。跨度>
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2010-09-06
  • 2011-02-09
  • 2010-10-05
  • 1970-01-01
相关资源
最近更新 更多