session保存在專門的StateServer中,該種方式,性能損失比sql略好。比inproc據說有10%-15%的性能損失。怎么使用StateServer 服務器呢?
1、初始化StateServer服務器
啟動ASP.NET 狀態服務【aspnet_state】,該服務默認是手動啟動的,可以通過修改注冊表,設置為自動啟動並允許遠程連接。修改方法如下:
修改注冊表: [HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/aspnet_state/Parameters]
設置 AllowRemoteConnection = 1 , 設置 Port = 42424 (十進制,默認即為42424)
AllowRemoteConnection ,0僅能本機使用,1可以供其他機器使用.
Port是服務的端口號
2、修改webconfig配置文件
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="60"/>
其中stateConnectionString中的tcpip表示StateServer服務器的ip和端口。
注意StateServer不支持負載均衡,如果是大並發請保存在sql中。
參考資料:
使用一個 SQL 數據庫 SQL Server 會話狀態的所有應用程序可能導致瓶頸
http://support.microsoft.com/kb/836680/zh-cn
ASP.NET 中 Session 實現原理淺析 [1] /[2]
http://www.cnblogs.com/flier/archive/2004/08/04/30226.html
http://www.cnblogs.com/flier/archive/2004/08/07/30902.html
理解Session State模式+ASP.NET SESSION丟失FAQ [翻譯]
http://www.cnblogs.com/tonyqus/archive/2006/10/24/522618.html