我在Razor的MVC3应用程序中工作。验证用户后,在我的帐户控制器中,我从数据库获取用户ClientID。在这里,我想在Session变量中持久化ClientID。这是在所有控制器和Razor视图中使用的。
我不知道实现this的最佳方法是什么。如何在会话变量中保存数据。以及如何在控制器中的会话变量中使用持久化数据。
感谢您的帮助..
答案 0 :(得分:18)
我通常会编写一个Session包装器,以便将来轻松访问它:
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;
答案 1 :(得分:2)
如果您使用的是ASP.NET Forms Authentication,则用户名已存储在cookie中。您可以通过
从Controller访问它Controller.User.Identity.Name
可以将用户ID存储为用户名。当你打电话给
时FormsAuthentication.RedirectFromLoginPage
为其指定ID而不是名称。然后可以使用上述方法找到ID,并且不需要额外的会话数据。如果您想在会话中存储内容,请致电
Session["UserID"] = value;
来自您的控制器。