ashx頁面中context.Session["xxx"]獲取不到值的解決辦法


1.在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString()進行讀寫。 而在ashx中,Session都要使用context.Session,讀寫方法不變。

 

2. 在ashx文件中,若要對Session進行成功的讀寫,應該在使用 Session的class后增加接口IRequiresSessionState (添加 時可能提示添加命名空間 using System.Web.SessionState 的引用),否則 .Sessio context n["xxx"]讀出的總是null

 

那么,在aspx、aspx.cs和ashx中可以使用Session后,我們在 AppCode的cs文件中,如何操作Session或者得到訪問者的IP?

首 先, aspx.cs中是直接Request和Session,而在ashx中是context.Request和 context.Session。aspx.cs中可以直接使用,是因為有Web.UI的支持,而ashx中只能靠傳進去的HttpContext實例對 Request和Session等進行操作。那么同樣的,AppCode中的cs文件中也沒有Web.UI,但是沒有HttpContext參數,如果 cs中可以得到當前的HttpContext,那么自然而然就可以根據這個HttpContext去操作Request和Session。

HttpContext類中有一個靜態屬性叫Current,我們可以通過這個屬 性去得到當前的HttpContext。當然,在cs中要操作Session,也應該增加IRequiresSessionState 接口。

 

與Session、 Request、Response、Server等相關的方法和屬性,都可以根據這個模式、方法去套用。

比如,在AppCode的cs文件 中要得到當前訪問者的IP,可以用HttpContext.Current.Request.UserHostAddress。

 

在 做一個ajax應用的時候,建立了一個ashx頁面,讓前端的js來刷該頁面。在方法public void ProcessRequest(HttpContext context)中,記錄信息的時候,用到了 context.Session.SessionID和 context.Session["UserPtid"]。再測試查看后台數據記錄的時候,這兩個字段竟然都保存為空,這是為什么呢 ?

   其實,只要讓你的ashx頁面類繼承System.Web.SessionState.IReadOnlySessionState 接口即可。該接口是個標記接口,沒有任何方法,它只是讓目標http處理程序只需對會話狀態的值具有讀訪問權限。詳細用法,請參閱msdn。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM