2010-05-03 58 views
5

我遇到了一個asp.net c#站點的問題,我將session對象設置爲true,然後重定向到另一個需要檢查會話狀態對象的值的頁面,它是空值。Sessionstate不在頁面間保存

有時它被正確設置,其他時間只是空。

當我在本地機器上進行調試時,它每次都能很好地工作。只有當我上傳到我的網絡服務器時,這種氣質行爲纔會發生。

由於它基於網站的安全性,每次會話數據都是有效且準確的,這顯然是非常重要的。

會話狀態數據不可靠嗎?

AFAIK其設置爲inproc,無cookie,30分鐘超時,香草安裝的IIS。

有沒有人有任何建議?也許我需要在會話數據的存儲和讀數之間進行thread.sleep?

注:寫和讀的時間。如果會話狀態丟失寫入數據到內存約70ms的..有充裕的時間.....

回答

1

,通常是因爲你的過程無論是回收還是失敗。我絕不會「依賴」頁面之間的會話狀態。相反,您可能想嘗試以其他方式在頁面之間持久保存數據。也許通過表單變量傳遞信息或將數據保存在數據庫中。

ASP.NET Profiles是保存這類信息的首選方式。您可能想要閱讀ASP.NET State Management Recommendations

+0

實際上,OP表明它是一個安全問題,所以可能與認證有關。在這種情況下,沒有表格票據的配置文件不會被授權使用。 – 2010-05-03 13:54:37

2

不,這聽起來像你濫用會話狀態。你不能依靠用戶的會話在那裏。您的ASP.NET輔助進程可能會回收,重新啓動應用程序並終止所有會話,或者文件可能在您的網站中發生變化,從而導致應用程序重新啓動並刷新所有會話,Cookie可能會刷新客戶端,超時等等。

所以你必須爲會話狀態提供所有這些場景。儘量避免使用像這樣的會話狀態。如果您在會話狀態中設置訪問權限,但您並不確切知道它是如何工作的,則可能會打開您的網站以承擔很多安全風險。

2

一切指向一個網絡農場。如果您的生產環境中有不同的Web服務器爲您的應用程序提供服務,則可以嘗試此行爲。

對於這個「我的機器上的作品」我找不到任何其他解釋!

+0

我同意,它間歇性地工作的原因是因爲有時你得到相同的工作流程,而其他的工作流程沒有。嘗試使用InProc以外的sessionstate模式。 – 2010-05-03 13:44:01

2

我沒有你的問題的答案,但克勞迪奧我的東西。

我不得不說的是,使用會話的安全性是如此的90年代。從字面上看。

FormsAuthentication的開發是爲了取代該技術,並做了相當不錯的工作。

您應該僅僅依靠會話處理容易恢復的瑣碎問題。

安全不是其中之一。