我正在与剃刀在MVC3应用程序工作。在我的帐户控制器中,在验证用户之后,我从数据库中获取用户ClientID。在这里,我想在会话变量中持久化ClientID。它在all控制器和Razor视图中使用。
我不知道实现this.OR的最佳方式是什么,如何在会话变量中持久化数据。以及如何跨控制器使用会话变量中的持久化数据。
谢谢你的帮助。。
发布于 2012-07-25 06:22:53
如果使用的是ASP.NET窗体身份验证,则用户名已存储在cookie中。您可以通过以下方式从控制器访问它
Controller.User.Identity.Name
可以将用户ID存储为用户名。当你调用类似于
FormsAuthentication.RedirectFromLoginPage
为它提供ID,而不是名称。然后,可以使用上面的方法找到ID,而不需要额外的会话数据。如果要在会话中存储某些内容,只需调用
Session["UserID"] = value;
从你的控制器。
发布于 2012-07-25 06:24:46
我通常编写一个会话包装器,以便将来可以轻松地访问它:
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;
如果你愿意,你可以像这样在会话中使用整个对象。
或者您可以这样设置它:SessionData.ClientId = clientId;
https://stackoverflow.com/questions/11643721
复制相似问题