2009-07-14 66 views
8

我想在使用它之前檢查基本頁面類中是否存在Session,但是我發現如果它不存在,它會拋出異常通過檢查:ASP .NET檢查會話

if (Session != null) 
{ 
    Session.Remove("foo"); 
} 

將拋出此異常:當enableSessionState設置爲true只能用

會話狀態,無論是在 配置文件或Page指令。另請確保 System.Web.SessionStateModule或自定義會話狀態模塊包含在應用程序配置中的 \\部分中。

該檢查發生在所有我的aspx頁面派生自的基本頁類的Load事件中。該應用程序已啓用會話,並具有在httpModules節點中列出的模塊。這是一個頻繁使用會話的應用程序,通常沒有問題。

我只在某些頁面出現此錯誤,大部分時間它不可靠。我知道我應該做一些不同的事情來防止錯誤,但我不確定是什麼?

我是否在生命週期中過早地調用會話? 我沒有正確檢查會話是否可用?

回答

3

你可以讓你的支票更安全 - Page.Session包裝空檢查一下Context.Session屬性。所以你應該能夠檢索Context.Session並檢查它是否爲空。如果是,則會話狀態不可用。

但應提供的Page_Load(),使指向其他地方的問題:)

0

由於某個Session變量爲空,您沒有遇到異常,只是在未配置爲與會話狀態服務器通信的頁面上使用會話邏輯(這在某些情況下很有意義一臺不同的機器)。如果這對您不是問題,請考慮確保始終將enableSessionState設置爲true。

0

您是否檢查了正在拋出Page指令的enableSessionState屬性錯誤的頁面?您可以通過轉到.aspx頁面並檢查enableSessionState屬性是否設置爲true/false。如果其設置爲false,則使其爲true

還要檢查在標籤<pages /> web.config文件,並對其進行更新,包括 -

<pages enableSessionState="true" /> 

參考:Here

+0

enableSessionState應該是頁面類的屬性?我只看到enableViewState作爲一個屬性。 – 2009-07-14 13:36:11

0

嘗試檢查HttpContext.Current.Session,甚至HttpContext.Current(我做了很多的單元測試,當這些部件被稱爲從在ASP.NET我得到了那些增值經銷商,但是當我把他們從NUNIT我沒有讓他們提供)

9

可以使用的方法是這樣來確定當前請求使用會話:

public static bool RequestHasSession 
    { 
     get 
     { 
      return (HttpContext.Current.Handler is IRequiresSessionState); 
     } 
    } 

如果你不確定你是否在web上下文中運行,你需要檢查HttpContext。事先不是空的。

+0

`IReadOnlySessionState`繼承`IRequiresSessionState`,所以你只需要檢查`HttpContext.Current.Handler是IRequiresSessionState`。 – 2013-11-13 15:56:32