asp.net web程序使用负载均衡后session状态的保存
SessionState存储方式配置
【概述:所有分流节点使用同一份session存储】
1、配置session存储介质和网站web.config
web.config->system.web->sessionState
配置为:<sessionState mode="SQLServer" sqlConnectionString="server=192.168.2.xx;user id=xx;password=xx;" ></sessionState>
在负载情况下,model一般设为:SQLServer或StateServer
SQLServer:
session数据保存在sqlserver数据库,库名为ASPState(特定)
例:<sessionState mode="SQLServer" sqlConnectionString="server=.;uid=sa;pwd=123" ></sessionState>
库的建立使用fremework文件夹下的aspnet_regsql.exe
执行cmd命令:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regsql.exe -S . -U sa -P 123 -ssadd -sstype p
StateServer:
session保存在一台服务器的服务上,服务名:aspnet_state
例: <sessionState mode="StateServer" stateConnectionString="tcpip=192.168.2.124:42424" />
aspnet_state服务默认监听地址:127.0.0.1,端口:42424
如需修改,进regedit ->
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
修改 AllowRemoteConnection为1表示可远程访问,注意防火墙
2、修改各机器加密key一致
目地:使其各机器生成的session都能被各自识别
machine.config:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
在system.web节点下增加或修改:
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
validation="SHA1"/>
其中:
validationKey=[A-Z0-9]{128} 64字节 =>ascII
decryptionKey=[A-Z0-9]{48} 24字节=》ascII
###########################
# 经过测试,发现这个key可以不改 #
###########################
3、保证每台服务器的网站ID一致

【完成!(经过测试,第2条为可选)】
具体来源查看msdn:
https://msdn.microsoft.com/en-us/library/ms178586.aspx#State Server Mode

浙公网安备 33010602011771号