User.Identity数据来自哪里?

nia*_*her 6 asp.net-mvc-2

例如:如果我正在检索User.Identity.Name,它是来自.ASPXAUTH cookie还是使用我的会员提供程序从数据库中检索?

我访问User.Identity时是否有任何数据库请求?

谢谢.


编辑:现在我很确定它来自身份验证票证cookie,但找不到任何官方文档来确认这一点.任何人?

Bri*_*kel 1

这应该可以回答你的问题...

“表单身份验证票证不仅包括用户的身份,还包含有助于确保令牌完整性和安全性的信息。” 摘自以下 Microsoft 文章:

http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-vb

除了该解释之外,观察 ASP.NET 行为还支持以下结论:用户名实际上存储在 ASPXAUTH cookie 中:在用户经过身份验证后,ASP.NET 不会在后续页面请求中访问数据库。您可以自己证明这一点,就像我所做的那样,通过运行 SQL Profiler 来监视 ASP.NET 应用程序使用的数据库。

另请注意,用户名和身份验证票证数据不存储在会话状态中。除了引发安全问题之外,这种实现还会导致 ASP.NET 成员资格在会话状态被禁用时中断。这是另一个堆栈溢出答案,表明表单身份验证(成员身份)数据和会话状态彼此无关:

FormsAuthentication.SetAuthCookie() 是否创建基于会话的 cookie?

该答案还链接到 MSDN 文章,此处详细解释了 ASPXAUTH cookie,尽管我上面引用的文章似乎更最新。