我使用VS2010並創建了一個簡單的asp。 Web表單應用程序,使用Development Server進行測試。
我試圖存儲用戶數據 - 從SQL Server查詢 - 在會話中,因爲我不想在每次請求訪問數據庫。我正在使用'Application_AuthenticateRequest'和'Session_Start'方法。
第一輪: AuthenticateRequest調用。下面的代碼運行:爲什麼Global.asax中的HttpContext.Current.Session爲null?
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_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事件的訪問會話,但它是一個不好的做法,我認爲,我把每一個認證的Page_Load。 任何想法如何訪問會話?
謝謝你的建議,
彼得
+1 - 我沒看過原題不夠緊密。 – 2010-11-15 15:49:04
謝謝。這是解決方案。 – 2010-11-15 16:05:49
@TorbjörnHansson:有時候它是空的,你知道爲什麼嗎? – Homam 2011-07-17 19:35:32