7

我正在使用 Razor 处理 MVC3 应用程序。在验证用户后,在我的帐户控制器中,我从数据库中获取用户 ClientID。在这里,我想将 ClientID 保留在 Session 变量中。它在所有控制器和 Razor 视图中使用。

我不知道实现这个的最佳方法是什么。或者如何在会话变量中持久化数据。以及如何在整个控制器中使用会话变量中的持久数据。

谢谢你的帮助..

4

2 回答 2

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;

于 2012-07-25T06:24:46.083 回答
2

如果您使用的是 ASP.NET 表单身份验证,则用户名已存储在 cookie 中。您可以通过控制器从控制器访问它

Controller.User.Identity.Name

可以将用户 ID 存储为用户名。当你打电话给像

FormsAuthentication.RedirectFromLoginPage

给它 ID 而不是名称。然后可以使用上述方法找到 ID,不需要额外的会话数据。如果你想在会话中存储一些东西,只需调用

Session["UserID"] = value;

从您的控制器。

于 2012-07-25T06:22:53.120 回答