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