如何在 .NET MVC 5 中存储会话数据

How to store session data in .NET MVC 5

我可以使用 HttpContext.ApplicationInstance.Context class 使用 Session 函数存储会话数据吗? 或者有更好的方法吗?

通常会话在您的控制器操作中作为 属性 可用:

public ActionResult Index()
{
    this.Session["foo"] = "bar";
    return View();
}

因为 Session 属性 是 HttpSessionStateBase 类型,所以在单元测试中可以更容易地模拟它。请永远不要使用静态 HttpContext.Current.Session,因为您可能会在其他地方看到建议。

如果您不在控制器操作中,如果您有一个 HttpContextBase 的实例(几乎在 MVC 管道的每个部分)使用它的会话 属性,您可以访问会话。

是的,您可以利用 HttpContext 将数据应用到 Session 中。不过,您应该警惕此类实现,Model View Controller 本质上是 stateless。尽管会话将决定某种形式的状态。

您必须考虑到这一点,否则如果不考虑这些变量,您可能会引入大量孤立的会话变量。根据您的应用程序,这可能会迅速占用您环境中的内存。

如果应用程序很小,您可以在控制器中使用以下内容轻松完成:

HttpContext.Current.Session.Add("Title", "Data");