如何在 .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");
我可以使用 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");