我正在使用 Razor 处理 MVC3 应用程序。在验证用户后,在我的帐户控制器中,我从数据库中获取用户 ClientID。在这里,我想将 ClientID 保留在 Session 变量中。它在所有控制器和 Razor 视图中使用。
我不知道实现这个的最佳方法是什么。或者如何在会话变量中持久化数据。以及如何在整个控制器中使用会话变量中的持久数据。
谢谢你的帮助..
我正在使用 Razor 处理 MVC3 应用程序。在验证用户后,在我的帐户控制器中,我从数据库中获取用户 ClientID。在这里,我想将 ClientID 保留在 Session 变量中。它在所有控制器和 Razor 视图中使用。
我不知道实现这个的最佳方法是什么。或者如何在会话变量中持久化数据。以及如何在整个控制器中使用会话变量中的持久数据。
谢谢你的帮助..
我通常会编写一个 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;
如果您使用的是 ASP.NET 表单身份验证,则用户名已存储在 cookie 中。您可以通过控制器从控制器访问它
Controller.User.Identity.Name
可以将用户 ID 存储为用户名。当你打电话给像
FormsAuthentication.RedirectFromLoginPage
给它 ID 而不是名称。然后可以使用上述方法找到 ID,不需要额外的会话数据。如果你想在会话中存储一些东西,只需调用
Session["UserID"] = value;
从您的控制器。