Page.User.Identity与Request.LogonUserIdentity之间的差异

时间:2010-02-02 19:14:12

标签: c# asp.net asp.net-membership

Page.User.Identity和Request.LogonUserIdentity之间有什么区别(幕后)?不是类型,名称等方面的差异,而是它们在幕后实现的差异(即一个调用windows xxx api,另一个调用asp.net xxx api ......)。

1 个答案:

答案 0 :(得分:19)

这取决于您用于对用户进行身份验证的机制,以及您用于模拟的设置。

例如,在VS开发服务器下,使用Forms身份验证,标准SQL成员资格提供程序和以下代码:

// m_LoggedIn is a Literal control on the page:
m_LoggedIn.Text = string.Format("<br />Page.User.Identity: {0} " + 
                                "<br />Request.LogonUserIdentity: {1}",
                                Page.User.Identity.Name, 
                                Request.LogonUserIdentity.Name);

我得到以下输出:

  

Page.User.Identity:zhaph

     

Request.LogonUserIdentity:[ComputerName] \ Ben

第一行(Page.User.Identity)是我登录到站点的表单身份验证帐户,第二行是请求运行的Windows身份 - 因为我没有启用模拟,这是我的Windows登录,因为这是运行Web服务器的帐户。

就API而言,HttpRequest.LogonUserIdentity正在调用WindowsIdentity类,它始终代表 Windows用户帐户,而Page.User正在创建实现IPrinciple的对象,它允许您使用许多不同的后备存储来表示用户 - 例如MembershipProvider提供的SQL数据库结构。