gpt4 book ai didi

asp.net - 为什么 HttpContext.Current.Session 在 Global.asax 中为空?

转载 作者:行者123 更新时间:2023-12-03 14:37:03 24 4
gpt4 key购买 nike

我正在使用 VS2010 并创建了一个简单的 asp。 Web 表单应用程序,使用 Development Server 对其进行测试。
我尝试在 session 中存储从 sql server 查询的用户数据,因为我不想在每个请求中都访问数据库。我正在使用“Application_AuthenticateRequest”和“Session_Start”方法。
第一回合:
已调用 AuthenticateRequest。以下代码运行:

public static void Initialize(string login_name, bool force_refresh)
{
HttpSessionState Session = HttpContext.Current.Session;
object o = Session == null ? null : Session["EMPLOYEE_DATA"];
if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
{
_current = UIManager.GetEmployee(login_name);
if (Session != null)
{
Session["EMPLOYEE_DATA"] = _current;
}
}
else
{
_current = (Employee)o;
}
}

_current 变量是通过静态属性发布的私有(private)静态字段。
在第一轮中,Session 为空,我认为没关系,因为 Session_Start 尚未调用。
Session_Start 如下所示:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}

在下一轮当然不会调用 Session_Start 但在 AuthenticateRequest 中我无法访问 session 。 HttpContext.Current.Session 为空,this.Session 引用抛出 HttpException 表示“ session 状态在此上下文中不可用”。

但是,我可以从任何 page_load 事件访问 session ,但这是一种不好的做法,我认为我在每个 page_load 都进行身份验证。
知道如何访问 session 吗?

谢谢你的建议,
彼得

最佳答案

您无法在 Application_AuthenticateRequest 上使用 Session ,因为它当时没有绑定(bind)。

我认为您可以使用事件 Application_AcquireRequestState。

关于asp.net - 为什么 HttpContext.Current.Session 在 Global.asax 中为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4185871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com