一尘不染

ASP.NET MVC 中的会话变量

all

我正在编写一个 Web
应用程序,它允许用户浏览到网站中的多个网页,发出某些请求。用户输入的所有信息都将存储在我创建的对象中。问题是我需要从网站的任何部分访问这个对象,我真的不知道实现这一点的最佳方法。我知道一种解决方案是使用会话变量,但我不知道如何在
asp .net MVC 中使用它们。我将在哪里声明一个会话变量?还有其他方法吗?


阅读 47

收藏
2022-09-03

共1个答案

一尘不染

我认为您会想考虑事物是否真的属于会话状态。这是我发现自己时不时做的事情,它是一种很好的强类型方法,但是在将事情放在会话上下文中时应该小心。并非所有东西都应该存在,因为它属于某个用户。

在 global.asax 中钩住 OnSessionStart 事件

void OnSessionStart(...)
{
    HttpContext.Current.Session.Add("__MySessionObject", new MySessionObject());
}

从代码中 HttpContext.Current 属性 != null 的任何位置,您都可以检索该对象。我使用扩展方法来做到这一点。

public static MySessionObject GetMySessionObject(this HttpContext current)
{
    return current != null ? (MySessionObject)current.Session["__MySessionObject"] : null;
}

这样你就可以在代码中

void OnLoad(...)
{
    var sessionObj = HttpContext.Current.GetMySessionObject();
    // do something with 'sessionObj'
}
2022-09-03