2011年4月8日 星期五

在iframe中,如何讓 ASP.NET 使用 Session 資料時不要再自動消失

我們在 ASP.NET 網站使用 Session 時,常常因為 web.config 修改或更新 Bin\ 目錄下的 dll 而導致 Session 消失,Session 常常消失也挺惱人的,不是導致突然被自動登出,就是發生非預期的 Exception ... 等。 ( 有時候因為主機安裝防毒軟體也會造成 Session 資料無故消失,因為這些防毒軟體可能會誤判某檔案、某記憶體含有病毒資訊 )

這個時候我們可以將 Session 預設的模式 ( InProc ) 改成 StateServer 模式,但此時必須確認本機的 ASP.NET 狀態服務 是啟動的狀態!

請到 控制台 > 系統管理工具 > "服務"
找到 "ASP.NET 狀態服務" 或 "ASP.NET State Service"
此服務預設是屬於「停用」的狀態,請先切換到「自動」再按下「套用」再直接按「啟動」按鈕即可。

接者你可以到你的 ASP.NET 網站設定 web.config 組態檔,設定如下:
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=localhost:42424"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>
在web.config裡的cookieless="false"改為:cookieless="true"
這樣就可以將 Session 的資料存到本機的 ASP.NET 狀態服務去了,也不會無故 Session 自動消失了。