2011-07-04 30 views
0

我有時在調用Http處理程序時訪問HttpContext.Items [typeof(UserProfile)]對象時遇到問題,其中UserProfile是存儲在會話cookie中的對象通過表單認證。ASP.NET Website HttpContext.Items在HTTPHANDLER中隨機爲空

當我在Visual Studio中部署或調試的同一臺計算機上打開瀏覽器時,它的工作時間爲100%,但是當我從遠程計算機進行測試時,它會隨機失敗。根據fiddler,我放入了一些跟蹤,基本上HttpContext.Items [typeof(UserProfile)]爲null,即使Session Cookie傳遞成功。

我已經嘗試在HTTPHandler中實現IReadOnlySessionState,但它仍然無法正常工作。我意識到,有時,在登錄3分鐘或更長時間之後,它會在100%的時間內運行。

任何想法,爲什麼這可能會發生和解決方案?

THX

回答

0

會話狀態,表單驗證和HttpContext.Items都是不相關的 - 所以不知道你爲什麼把它們組合起來。表單身份驗證擁有自己的Cookie,與會話Cookie分開,並且其生存時間可能不同。無論用戶是否經過身份驗證,您都可以擁有會話狀態。我也不確定如何在會話cookie中存儲UseProfile對象 - 建議放置一些代碼。

HttpContext.Items是與每個HttpRequest關聯的物業包 - 請注意,此集合僅適用於請求生存時間,並且沒有內置機制來保留集合。因此,除非您在某個模塊或global.asax中爲每個請求放置該對象,否則它不太可能會在此集合中獲得您的對象UserProfile。你需要解釋一下你究竟在做什麼或許與代碼示例!

+0

我正在使用IReadOnlySessionState因爲我用完了想法,它在谷歌搜索過程中出現,我想我提到它,所以人們不會回答我的。用戶配置文件從global.asax中的會話cookie中的票證中提取並分配給HttpContext.Items。但有時它在http處理程序中仍然爲空(在部署的服務器上)。 – Joshscorp

+0

@Titan,你可以發佈放入數據並從會話cookie中取出的代碼嗎?使用會話cookie存儲自定義數據有點不尋常 - 我寧願選擇一個單獨的cookie! – VinayC