【发布时间】:2010-11-15 15:26:47
【问题描述】:
我正在使用 VS2010 并创建了一个简单的 asp。 Web 表单应用程序,使用开发服务器对其进行测试。
我尝试在会话中存储从 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 变量是通过静态属性发布的私有静态字段。 在第一轮中,Session 为空,我认为没关系,因为 Session_Start 尚未调用。 Session_Start 如下所示:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
在下一轮当然不会调用 Session_Start 但在 AuthenticateRequest 中我无法访问会话。 HttpContext.Current.Session 为 null,this.Session 引用抛出 HttpException 表示“会话状态在此上下文中不可用”。
但是,我可以从任何 page_load 事件访问 Session,但这是一种不好的做法,我认为我在每个 page_load 都进行身份验证。 知道如何访问会话吗?
感谢您的建议,
彼得
【问题讨论】:
标签: asp.net session-variables global-asax