解决网站在负载均衡环境下SESSION丢失的问题
生活随笔
收集整理的這篇文章主要介紹了
解决网站在负载均衡环境下SESSION丢失的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在WEB場中,動態網頁往往會因為幾臺主機做了負載而產生SESSION丟失的問題,網上也有很多的介紹,我這里只將我經歷的過程給大家分享一下:
系統要運行在負載平衡的 Web 場環境中,而系統配置文件web.config中的Session狀態卻設置為InProc(即在本地存儲會話狀態),導至在用戶訪問量大時,Session常經超時的情況。引起這個現象的原因主要是因為用戶通過負載平衡IP來訪問WEB應用系統,某段時候在某臺服務器保存了Session 的會話狀態,但在其它的WEB前端服務器中卻沒有保存Session的會話狀態,而隨著并發量的增大,負載平衡會當作路由隨時訪問空閑的服務器,結果空閑的服務器并沒有之前保存的Session會話狀態。 解決辦法: 1.當您在負載平衡的 Web 場環境中運行 ASP.NET Web 應用程序時,一定要使用 SqlServer 或 StateServer 會話狀態模式,在項目中我們基于性能考慮并沒有選擇SqlServer模式來存儲Session狀態,而是選擇一臺SessionStateServer 服務器來用戶的Session會話狀態。我們要在系統配置文件web.config中設置如下: <sessionState mode="StateServer" cookieless="false" timeout="240" stateConnectionString="tcpip=192.168.0.1:42424" stateNetworkTimeout="14400" /> 這里的紅字體的IP一定要是同域的一臺機器,在這臺機器上進行第二步的操作,同時將其注冊表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servi ces\aspnet_state\Parameter s\AllowRemoteConnection的鍵值改為1,然后重啟本機的ASP.NET State Service服務 還要添加一項 <machineKey validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24EA123C" validation="SHA1"/> 如何生成machineKey? 按照MSDN的標準說法:“對密鑰進行配置,以便將其用于對 Forms 身份驗證 Cookie 數據和視圖狀態數據進行加密和解密,并將其用于對進程外會話狀態標識進行驗證。”也就是說Asp.Net的很多加密,都是依賴于machineKey里面的值,例如Forms 身份驗證 Cookie、ViewState的加密。默認情況下,Asp.Net的配置是自己動態生成,如果單臺服務器當然沒問題,但是如果多臺服務器負載均衡,machineKey還采用動態生成的方式,每臺服務器上的machinekey值不一致,就導致加密出來的結果也不一致,不能共享驗證和ViewState,所以對于多臺服務器負載均衡的情況,一定要在每臺站點配置相同的machineKey。 machineKey生成的算法:| 1 2 3 4 5 6 7 8 9 10 11 12 13 | validationKey?=?CreateKey(20); decryptionKey?=?CreateKey(24); protected?string?CreateKey(int?len) { byte[]?bytes?=?new?byte[len]; new?RNGCryptoServiceProvider().GetBytes(bytes); StringBuilder?sb?=?new?StringBuilder(); for(int?i?=?0;?i?<?bytes.Length;?i++) { sb.Append(string.Format("{0:X2}",bytes[i])); } return?sb.ToString(); } |
| 1 2 3 4 5 6 7 | <?xml?version="1.0"?> <configuration> <system.web> <machineKey?validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8"? decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77"?decryption="3DES"?validation="SHA1"/> </system.web> </configuration> |
總結
以上是生活随笔為你收集整理的解决网站在负载均衡环境下SESSION丢失的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 存储过程中执行动态Sql语句
- 下一篇: 网站使用微信扫码登录流程