2010-04-14 70 views
6

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

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

谢谢。


编辑:现在我敢肯定它来自一个身份验证票证的cookie,但找不到任何官方文件证实了这一点。任何人?

回答

1

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

“窗体身份验证票证不仅包括用户的身份,同时也包含信息以帮助确保完整性和安全性令牌“。

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

除了这种解释,观察ASP.NET行为还支持用户名,实际上,存储在ASPXAUTH饼干的结论:从下面的Microsoft文章摘录ASP.NET不在用户通过身份验证后,在随后的页面请求中击中数据库。就像我一样,您可以自己证明这一点,通过运行SQL事件探查器来监视数据库,因为它是由ASP.NET应用程序使用的。

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

Does FormsAuthentication.SetAuthCookie() make a session based cookie?

这个问题的答案还链接到一个MSDN文章,here,这解释了ASPXAUTH饼干详细地说,虽然我上面引用的文章似乎更加流行。

0

.ASPXAUTH cookie/User.Identity来自身份验证(Windows,Forms)。

如果你正在试图获得会员用户需要使用

Membership.GetUser() 

Membership.GetUser(User.Identity.Name) 

documentation here这将导致一个DB调用。

+0

我明白它来自认证。但是,当我调用User.Identity.Name - 从哪里检索值? Cookies或数据库或会话? – niaher 2010-04-14 11:48:47

+0

验证后Cookie只存在...所以...所有内容都取决于您的验证方案 – Nix 2010-04-14 12:39:03

1

我相信认证信息是特定于会话并维护在ASP.net进程或外部甚至SQL服务器。一旦用户通过身份验证,将生成一个会话令牌,该令牌用于跟踪状态服务中经过身份验证的用户的信息。在随后的请求中,会话令牌用于检索用户身份,并在那里获取预先填充的对象(如User.Identity.Name)。这必须在Forms Authentication模块或Windows身份验证模块中使用,具体取决于使用的身份验证类型。如果您设置为无cookie身份验证模式,会话令牌将显示在URL中。一旦会话过期,与会话有关的所有信息将从状态服务中删除。

希望这个清楚!

+0

即使它是一个被接受的答案,但它并不能真正回答我的问题。 – niaher 2010-05-24 14:08:16

+0

那你为什么接受它? – IsmailS 2010-06-04 10:22:59

+0

因为这个问题是在赏金的,所以我被迫做了。 – niaher 2011-01-13 13:34:34

1

这取决于您使用的会话类型。可以通过使用两个参数来改变会话 1.使用Cookies-Cookieless或使用Cookie 2.存储会话状态信息-Inproc(进程中),outproc(ASP.net状态服务)或Sql Server的过程。

如果您使用Sql Server来存储状态信息,则肯定会获取数据库查询来获取会话数据。 更多细节这里 -

http://www.codeproject.com/KB/aspnet/ExploringSession.aspx