2012-07-25 88 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