2013-01-14 28 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;