久久国产精品亚洲艾草网_黄色视频在线免费观看_国产强伦姧在线观看_无码国产69精品久久久久网站

machineKey配置,防止SESSION丟失

廣告:

在WEB場中,動態(tài)網頁往往會因為幾臺主機做了負載而產生SESSION丟失的問題,網上也有很多的介紹,我這里只將我經歷的過程給大家分享一下:

系統(tǒng)要運行在負載平衡的 Web 場環(huán)境中,而系統(tǒng)配置文件web.config中的Session狀態(tài)卻設置為InProc(即在本地存儲會話狀態(tài)),導至在用戶訪問量大時,Session常經超時的情況。引起這個現(xiàn)象的原因主要是因為用戶通過負載平衡IP來訪問WEB應用系統(tǒng),某段時候在某臺服務器保存了Session 的會話狀態(tài),但在其它的WEB前端服務器中卻沒有保存Session的會話狀態(tài),而隨著并發(fā)量的增大,負載平衡會當作路由隨時訪問空閑的服務器,結果空閑的服務器并沒有之前保存的Session會話狀態(tài)。

解決辦法:

1.當您在負載平衡的 Web 場環(huán)境中運行 ASP.NET Web 應用程序時,一定要使用 SqlServer 或 StateServer 會話狀態(tài)模式,在項目中我們基于性能考慮并沒有選擇SqlServer模式來存儲Session狀態(tài),而是選擇一臺SessionStateServer 服務器來用戶的Session會話狀態(tài)。我們要在系統(tǒng)配置文件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 數(shù)據(jù)和視圖狀態(tài)數(shù)據(jù)進行加密和解密,并將其用于對進程外會話狀態(tài)標識進行驗證。”也就是說Asp.Net的很多加密,都是依賴于machineKey里面的值,例如Forms 身份驗證 Cookie、ViewState的加密。默認情況下,Asp.Net的配置是自己動態(tài)生成,如果單臺服務器當然沒問題,但是如果多臺服務器負載均衡,machineKey還采用動態(tài)生成的方式,每臺服務器上的machinekey值不一致,就導致加密出來的結果也不一致,不能共享驗證和ViewState,所以對于多臺服務器負載均衡的情況,一定要在每臺站點配置相同的machineKey。
machineKey生成的算法:

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();
}

附參考的matchineKey配置:

<?xml version="1.0"?>
<configuration>
<system.web>
<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>
</system.web>
</configuration> 

2. 我們同時還要在SessionStateServer 服務器中啟動ASP.NET State Service服務,具體設置:控制面板>>管理工具>>服務>>ASP.NET State Service,把它設為自動啟動即可。

廣告:

編輯:Admin 時間:2021/12/11 12:20:42 閱覽:254   返回    
machineKey配置,防止SESSION丟失
掃描關注53BK報刊官網
掃描關注閱速公司微信