1. 程式人生 > >asp.net中處理程式呼叫HttpContext.Current.Session獲取值出錯

asp.net中處理程式呼叫HttpContext.Current.Session獲取值出錯

asp.net中處理程式呼叫System.Web.HttpContext.Current.Session獲取Session時提示錯誤:未將物件引用設定到物件的例項

解決辦法:在處理程式檔案類中實現IRequiresSessionState介面,如:public class sjzft : IHttpHandler, IRequiresSessionState{}

原理:

一般情況下通過這種方式獲取Session值不會有問題,不過應特別注意要使用session必須要page_load方法執行以建立了page物件以後才有session的使用目標,此時先檢測Session是否為Null再呼叫值是不會提示錯誤的。

如果直接在Page頁面中定義一個全域性變數取Session的值就會提示未設定例項的錯誤!使用Application,Cookie同理也需注意這個問題。

ASHX一般處理程式檔案中如需呼叫Session必須繼承System.Web.SessionState.IRequiresSessionState介面,才能實現Session讀寫!

System.Web.SessionState的介面介紹:

  1. IReadOnlySessionState 指定目標 HTTP 處理程式只需要具有對會話狀態值的讀訪問許可權。這是一個標記介面,沒有任何方法。
  2. IRequiresSessionState 指定目標 HTTP 處理程式需要對會話狀態值具有讀寫訪問權。這是一個標記介面,沒有任何方法。

自定義 HTTP 處理程式,從IHttpHandler繼承,在寫System.Web.HttpContext.Current.Session["Name"]的時候沒有問題,但想將這個Session寫到某個變數時,發現Session的值為NULL;MSDN中的解決方法為:“在自定義 HTTP 處理程式中實現 IRequiresSessionState 介面,以確定處理程式是否需要對會話狀態值具有讀寫訪問權”,在自定義的類上加上該介面後,Session值獲取正常。