2015-08-30 49 views
0

我正在嘗試維護一個類中的會話MVC應用程序。下面是我使用get和set變量設置會話的代碼。但是每當我在設置後訪問這個變量時,它都會給出null。在C類中維護會話#

public static class MySession 
{ 
    public static string MyVar 
    { 
     get 
     { 
      return HttpContext.Current.Session["MyVar"] == null ? "" : HttpContext.Current.Session["MyVar"].ToString(); 
     } 
     set 
     { 
      HttpContext.Current.Session["MyVar"] = value; 
     } 
    } 
} 

我用來設置爲 MySession.MyVar="testData";

但是,當我訪問 string str = MySession.MyVar;

它給null值。有人知道爲什麼我的會話沒有存儲嗎?

回答

0

我的猜測是你沒有啓用會話狀態。

<system.web> 
    <sessionState mode="InProc" timeout="60"/> 
<system.web> 

默認情況下會話狀態在MVC中是禁用的,通常不推薦,除非絕對必要。

+0

對不起,這是不正確的。會話狀態默認已啓用。事情是,我以編程方式更改web.config文件,然後立即分配會話,因此應用程序池已重新啓動並且會話被清除。 –

1

會話變量非常暴露爲空,即每次由用戶,瀏覽器,網絡或應用程序本身創建新會話時。這就是爲什麼,非常建議用if ... else塊來包裝它。

if(Session["key"] != null) { 
    // Variable exists for the session 
    // use variable 
} else { 
    // Variable doesn't exist in the session 
    // create and user variable 
} 

但是,如果你仍然總是得到null,那麼你應該檢查什麼錯誤。我敢打賭,還有其他一些代碼或過程會終止以前的會話並重新啓動它們。您應該知道您可以通過編程方式刪除所有會話,這可能也會導致此問題。

此外,會話變量可以使用和服務使用類,這是沒有問題的。只要確保集合Session未被刷新。

+0

謝謝afzaal,你寫我的應用程序正在重新啓動,由於更改了網絡配置文件,因爲會話被清除。非常感謝。 –

+0

@ManpritSingh是的,有許多方法可以刷新會話,清除這些變量並將它們重置爲null。 –