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

标签 asp.net session-variables global-asax

我正在使用 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/

相关文章:

python - 在 Mechanize 中发出 LoadControl XHR 请求

c# - 如何在 ASP.Net MVC 中使用 Task 重定向到一个 Action

php - 如何根据 session 变量中的值删除数据

asp.net - HTTPModules 和 Global.asax -- ASP.NET 页面生命周期

asp.net - global.asax Application_Error 未触发

.net - global.asax 在本地计算机上工作,但在我发布到服务器后不起作用

c# - 在 asp.net 中以 List<T> 格式返回记录

c# - SQL 写入 ASP.NET 用户表不保存

使用 SET 的 MYSQL 变量会导致行为差异

页面之间的PHP session 变量变化