如何从不同位置访问同一会话

本文关键字:访问 会话 位置 | 更新日期: 2023-09-27 17:55:42

我有一个视图正在使用

Session["Something"] = 1;

我在类库项目中有一个类,它尝试使用

HttpContext.Current.Session["Something"]

但它重新调整了null.

public ActionResult Index()
{
    Session["Something"] = 1;
    var fromLib = (new MyLibClass()).GetSession("Something"); // null
    var fromHere = Session["Something"]; // 1
}
// Class library project
public object GetSession(string key)
{
    return HttpContext.Current.Session[key];
}

如何从会话中获取值?或者有没有办法保存值并在另一个地方检索(没有数据库或系统文件)

如何从不同位置访问同一会话

你不需要Session对象。

尽管Session适用于在 asp.net 应用程序中保存变量,但您可以实现自己的会话对象,以便在类库中使用,该对象轻巧快速且位于代码内部:

Dictionary<string, object> MySession = new Dictionary<string, object>();
MySession.Add("VariableName", myObject);
MyLib.Pass(MySession);

如果可能的话,尽量让它更具体,即如果你只是MyClass传递给你的库,那么:

Dictionary<string, MyClass> MySession = new Dictionary<string, MyClass>();

有两个会话

Session (refers to the view session)
HttpContext.Current.Session (refers to context session)

在任何地方使用HttpContext.Current.Session都是一样的。我创建了一个类来帮助我以我想要的方式访问会话值,因此我可以调用它而不必担心正确的会话。