2013-01-14 38 views
1

我在我的网站上使用一个简单的asp:登录表单进行用户身份验证。我已经将它作为基础,我可以和我的代码如下所示:如何从asp:login中获取用户名以存储会话?

<asp:Login ID="LoginForm" runat="server" 
    DestinationPageUrl="~/LoggedIn/TaskPanel.aspx" > 
</asp:Login> 

适当的表都在我的SQL Server数据库和登录工作就像一个魅力:)

登录后,我想检索一些用户数据并将其存储在会话中供以后使用。为此,我打算通过数据库中的存储过程传递用户名。 我尝试了以下,但现在当我尝试进行身份验证时,没有任何反应&页面刷新。

<asp:Login ID="LoginForm" runat="server" 
    DestinationPageUrl="~/LoggedIn/TaskPanel.aspx" 
    OnAuthenticate="storeUserDetails" > 
</asp:Login> 

C#:

protected void storeUserDetails(object sender, EventArgs e) 
{ 
    Session["accountCustUsername"] = LoginForm.UserName; 
    ... 
    ... 
} 

我也试图把一个Response.Redirect的这个方法,只是为了看看有什么事情发生,但没有做。

我想用登录模板来获取用户名文本框的ID吗?那么这将如何完成?

回答

1

如果您正确配置了窗体身份验证,则可以在登录后再调用User.Identity.Name

Session["accountCustUsername"] = User.Identity.Name; 
//if you aren't in your code behind use HttpContext.Current.User.Identity.Name; 

但是,你真的不需要做因为该值始终提供给您,只要您登录。

你可以把这个代码在TaskPanel.aspx的Page_Load中页面(因为我假设登录后到达的页面)

+0

我需要一个assembaly refrence?用户名不会出现在当前上下文中。 –

+0

明白了:System.Web.HttpContext.Current.User.Identity.Name!为什么这个工作,而不是你的建议?谢谢你的帮助! –

+0

@PatrickKeane我以为你试图从后面的网页代码访问它,所以我不认为你需要使用完全限定的名称。 – scartag

1

您可以使用Membership Api函数获取当前登录的用户。

包括这个命名空间

using System.Web.Security; 

访问当前用户

MembershipUser currentUser = Membership.GetUser(); 
string username = currentUser.Username; 

OR

string username = HttpContext.User.Identity.Name;