2013-01-10 180 views
0

我在頁面中使用C#代碼,我希望用戶登錄該頁面。此時,假設登錄信息可以通過數據庫進行驗證,我在整個會話中設置要跟蹤的會話變量。我不會在任何地方初始化會話,但通過設置會話變量,反正會發生這種情況。我的代碼沒有任何錯誤,但我不確定我是否正確執行此操作。登錄後正確初始化會話

代碼隱藏的頁面直接登錄成功後:

Business.User user  = new Business.User(); 

user.SetLabelCompanyId(); 
user.SetLabelUsername(); 

_labelUsername.Text  = user.GetLabelUsername(); 
_labelCompanyId.Text = MySession.Current.CompanyId; 

我打電話_labelUsername.Text的方式是什麼,我打算做的,但我打電話_labelCompanyId的方式是什麼,我覺得會是混亂的人不熟悉的與我的項目。它實現了創建會話的目標,但與用戶名稱不同,儘管以相同的方式使用。我寧願做的是:

_labelUsername.Text  = user.GetLabelUsername(); 
_labelCompanyId.Text = user.GetLabelCompanyId(); 

然後在什麼地方,這些代碼初始化MySession。我怎樣才能做到這一點?當我使用上述2行(沒有其他提及MySession)時,出現會話爲空並重定向到登錄頁面的錯誤。

+0

查看[ASP.NET會話狀態](http://msdn.microsoft.com/zh-cn/library/ms972429.aspx) –

回答

0

會話將在用戶第一次打開該網站時進行初始化。但是在這個時候,你的會話變量沒有被初始化。你需要像這樣的東西

//inside in your Business.User class (set reference to System.Web) 
public string GetLabelCompanyId() 
{ 
    string returnValue = String.Empty; 
    HttpContext context = HttpContext.Current; 
    if(context != null) 
    { 
    if(context.Session["CompanyId"] != null) 
    { 
     returnValue = context.Session["CompanyId"]; 
    } 
    } 

    return returnValue; 
} 

成功登錄後,您可以將值存儲到會話變量。

我非常推薦使用分離的類來訪問HttpContext,而不是直接在您的Business Class中。