2012-07-25 123 views
7

我正在使用Razor在MVC3應用程序中工作。在我的帳戶控制器驗證用戶後,我從數據庫中獲取用戶ClientID。在這裏,我想在Session變量中保留ClientID。這是在所有控制器和Razor視圖中使用的。如何在mvc3剃鬚刀視圖中使用會話變量保存數據?

我不知道什麼是實現this.OR的最佳方法.OR如何在會話變量中持久化數據。以及如何在整個控制器中的會話變量中使用持久數據。

感謝您的幫助..

+0

這可能是有用的http://www.hanselman.com/blog/TroubleshootingExpiredASPNETSessionStateAndYourOptions.aspx – ManirajSS 2015-02-14 06:57:34

回答

2

如果您正在使用ASP.NET窗體身份驗證,用戶名已經存儲在cookie中。您可以通過控制器通過

Controller.User.Identity.Name 

可以將用戶ID存儲爲用戶名。當你打電話像

FormsAuthentication.RedirectFromLoginPage 

給它的ID而不是名稱。然後可以使用上述方法找到該ID,並且不需要額外的會話數據。如果您想在會話中存儲某些內容,請致電

Session["UserID"] = value; 

從您的控制器。

+0

感謝您的答覆..其實我們正在實施的多租戶訪問我們的框架。所以我對在控制器中保存數據感到困惑。那麼你能否告訴我哪一個更好? – user10489 2012-07-25 07:17:49

18

我平時寫一個會話的包裝,讓我輕而易舉地訪問它的未來:

public class SessionData 
{ 
    const string ClientId_KEY = "ClientId"; 

    public static int ClientId 
    { 
     get { return HttpContext.Current.Session[ClientId_KEY] != null ? (int)HttpContext.Current.Session[ClientId_KEY] : 0; } 
     set { HttpContext.Current.Session[ClientId_KEY] = value; } 
    } 
} 

之後,你可以從任何地方訪問它是這樣的:

int clientId = SessionData.ClientId; 

如果你想你可以像這樣在Session中使用整個對象。

或者你可以設置它像這樣:SessionData.ClientId = clientId;

+0

感謝您的回覆......基本上我們正在爲我們的框架實施多租戶訪問。所以會議是很好的方法?我正在從DB獲取基於登錄用戶的ClientID。那麼我如何將CliendID綁定到Session變量? – user10489 2012-07-25 07:06:48

+0

我無法知道您的項目的所有含義和要求,但到目前爲止,我沒有看到使用Session的任何問題。我已經更新了我的答案,以顯示如何使用包裝器在Session中設置ClientId。 – Dmitry 2012-07-25 07:25:53

+0

在編寫包裝來訪問會話 – Nipuna 2015-07-12 04:30:41