2011-11-30 103 views
2

我正在使用以下代碼進行會話管理。失去我的會話變量

public class MyClass 
{ 
    public static int SomeProperty 
    { 
     get { return (int)HttpContext.Current.Session["MyID"]; } 
     set { HttpContext.Current.Session["MyID"] = value; } 
    } 
} 

問題有一次我得到「對象引用未設置爲對象的實例」。在get { return (int)HttpContext.Current.Session["MyID"]; },雖然我知道事實上,在會話中設置了MyID。對我來說,由於某種原因會話被破壞。任何想法爲什麼會發生?

我有在web.config中的會話狀態,這讓我相信,這是InProc服務器的情況下

回答

6

InProc會話狀態都受的AppDomain回收定義什麼。每當您更改網站的代碼或配置時,都會發生這種情況。 IIS也可以不時自動回收它。

您必須始終假定它可能爲空,並相應地處理它。

0

有一點要檢查的是,如果您要清除會話變量或在Web應用程序中的任意位置重新創建會話變量。如果是這樣,當應用程序查找現在已刪除的變量時,用戶在瀏覽器中單擊導航,清除會話狀態,然後在瀏覽器中轉發瀏覽導致會話變量丟失。