# IIS ###### tags: `Learning` ### 讓 Session 不會自動消失 #### ★Session消失的原因 * Timeout: web.config裡的SessionState Timeout屬性,單位是分鐘。 * Code裡面執行了清除Session的動作,如Session.Abandon()、Session.Clear()、Session.RemoveAll() * window.open 與 window.showModalDialog 混合使用 (?) * 當URL中的機器名稱中使用底線時(例如: http://web_server/myApp),會導致Cookie無法使用,進而造成Session失效。 * 防毒軟體 * 重新啟動 IIS * 修改 Web.config、Bin回收 * 若有多台 Server 因每台 Server 的 Session 不同 ( Ex. 今天在 Server A 存了 Session Egg,若下次的 Request 是 Call Server B,User 就會找不到 Session Egg ) #### ★多台 Server 解決方案 [ASP.NET程式中Session儲存的幾種模式](https://www.itread01.com/content/1546942022.html) <table> <tbody> <tr class="alt"> <th>值</th> <th>說明</th> </tr> <tr> <td> <p><strong>Custom</strong></p> </td> <td> <p>會話狀態將使用自定義資料儲存區來儲存會話狀態資訊。</p> </td> </tr> <tr class="alt"> <td> <p><strong>InProc</strong></p> </td> <td> <p>會話處於正在處理 ASP.NET 輔助程序的狀態。</p> </td> </tr> <tr> <td> <p><strong>Off</strong></p> </td> <td> <p>會話狀態被禁用。</p> </td> </tr> <tr class="alt"> <td> <p><strong>SQLServer</strong></p> </td> <td> <p>會話狀態將使用程序外 SQL Server 資料庫來儲存狀態資訊。</p> </td> </tr> <tr> <td> <p><strong>StateServer</strong></p> </td> <td> <p>會話狀態將使用程序外 ASP.NET 狀態服務來儲存狀態資訊。</p> </td> </tr> </tbody> </table> #### ★特別說明使用 State Service ##### 啟用 1. 請到 控制台 > 系統管理工具 > "服務" 2. 找到 "ASP.NET 狀態服務" 或 "ASP.NET State Service" 3. 此服務預設是屬於「停用」的狀態,請先切換到「自動」再按下「套用」再直接按「啟動」按鈕即可。 [參考資料 - 如何讓 ASP.NET 使用 Session 資料時不要再自動消失](https://blog.miniasp.com/post/2008/01/12/How-to-avoid-Session-data-loss-in-ASPNET) ※ ASP.NET State Service 是存在 Server 本機中,非 IIS ##### ★遠端共用 ASP.NET State Service 首先,必須使用 regedit 工具修改系統機碼  執行 regedit 先找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\Port 再將 AllowRemoteConnection 改成 1 如果你想改預設的 42424 Port 的話,也可以在這時修改成你想用的 Port number 並設定好防火牆規則。  接著,將 ASP.NET 狀態服務 重新啟動。 再來,修改每一台 Web 伺服器的 web.config 即可。 ``` <configuration> <system.web> <sessionState mode="StateServer" stateConnectionString="tcpip=You.State.Server.IP:42424" cookieless="false" timeout="20"/> </system.web> </configuration> ``` [參考資料 - 如何讓【ASP.NET 狀態服務】開放遠端連接](https://blog.miniasp.com/post/2008/01/12/How-to-let-ASPNET-State-Service-allow-remote-connection)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up