【发布时间】:2010-07-30 22:34:17
【问题描述】:
我不是在谈论 asp.net 会员资格。
对于每个登录的用户,我想从数据库中缓存一些属性,例如状态或好友请求的数量。
我可以创建自定义类,但我认为扩展现有的 User.Identity 属性会更好。
像这样的:
Label1.Text = User.Identity.Status;
有可能吗?
【问题讨论】:
我不是在谈论 asp.net 会员资格。
对于每个登录的用户,我想从数据库中缓存一些属性,例如状态或好友请求的数量。
我可以创建自定义类,但我认为扩展现有的 User.Identity 属性会更好。
像这样的:
Label1.Text = User.Identity.Status;
有可能吗?
【问题讨论】:
可以通过定义您自己的IIdentity(也可能还有IPrincipal)并在为HTTP 请求创建IPrincipal 时构造它。我相信这样做的正确位置是在引发 PostAuthenticateRequest 事件时。
另一个 stackoverflow 问题的答案解释了如何做到这一点 - ASP.NET set custom identity or principal(它表示 MVC,但都经过相同的处理管道)。
【讨论】:
根据您的示例,我认为您应该在会话数据中缓存状态和好友请求数量等内容。
使用 Identity 进行缓存的可能缺点是,如果我没记错的话,每个请求都会导致创建一个新的 Identity 实例。因此,对于每个请求,您都需要从某个地方重新填充这些 Identity 值,无论是数据库还是您已经缓存了数据的某个地方。
【讨论】:
IPrincipal 和 IIdentity。你可以有一个IIdentity,它的方法简单地从一个源检索朋友请求的数量,无论是在会话中还是从另一个数据源,这样,你就不会在实际的身份验证cookie中存储任何数据。