aspnet中,session默认以inproc模式存储,也就是保存在iis进程中,这样有个优点就是效率高,但不利于为本负载均衡扩展。可以把session信息保存在SQL Server中,据说,该种方式比起inproc性能损失为10%-20%。如何实现呢,主要分两步介绍:
ASPNET SQL Server 提供注册工具Aspnet_regsqlexe,用于创建供 ASPNET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库。Aspnet_regsqlexe位于 /%windir%/MicrosoftNET/Framework/<versionNumber>/aspnet_regsqlexe 目录下。如果麻烦,可以 直接用visual studio tools 的命令提示工具中直接输入aspnet_regsqlexe使用。用法如下:
Aspnet_regsqlexe <options>
可以用如下的语法来添加默认session数据库ASPState
aspnet_regsqlexe -S localhost -U sa -P why1234 -ssadd -sstype p
-S,-U/-P
必须是大写,分别表示数据库服务器,用户名和密码。
-ssadd / –ssremove 参数:
-ssadd表示是添加Session数据库, -ssremove表示移除Session数据库
创建自定义数据库myAppState,可以用如下的语法:
aspnet_regsqlexe -S localhost -U sa -P why1234 -ssadd -sstype c -d myAppState
2、配置webconfig
在webconfig的 <systemweb>节下添加如下配置:
<sessionState mode="SQLServer" sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>
如果在初始化数据库的时候,创建了自定义数据库可以用类似于如下的的配置:
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>
通过以上两步的设置,已经可以了。详细情况请参阅msdn。
一、Inproc模式
Inproc是缺省的设置,这种模式和以前的ASP的会话状态的方法是类似的,会话的状态会被保存在ASPNET进程中,它的优点是显而易见的:性能。进程内的数据访问自然会比夸进程的访问快。然而,这种方法Session的状态依赖于ASPNET进程,当IIS进程崩溃或者正常重起启时,保存在进程中的状态将丢失。
二、StateServer模式
为了克服Inproc模式的缺点,ASPNET提供了两种进程外保持会话状态的方法。
ASPNET首先提供了提供了一个Windows服务:ASPState,这个服务启动后,ASPNET应用程序可以将mode属性设置为 “SateServer”,来使用这个Windows服务提供的状态管理方法。
除了在webconfig文件中设置mode属性为StateServer外,还必须设置运行StateServer服务器的IP地址和端口号,具体配置方法如下:
21 如果在IIS所在的机器运行StateServer则IP地址就是127001,端口号通常是42424配置如下:
mode=”StateServer”
stateConnectionString=”tcpip=127001:42424″
22 找一台服务器作为Session服务器
如IP为:172181188,启动其Windows中的ASPNET State Service(默认的端口号为42424),把启动类型改为自动;
23 修改Session服务器注册表中的项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \aspnet_state\Parameters中的AllowRemoteConnection 键的值为1,其中的Port键控制ASPNET State Service的监听端口;修改后需要重启ASPNET State Service才生效;
24 每台服务器的webconfig 的stateConnectionString都指向这台服务器
使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在StateServer进程的内存空间中。
三、SQlServer模式
另一种会话状态模式是SQLServer模式。这种模式是将会话的状态保存在SQL Server数据库中的。使用这种模式前,必须至少有一台SQL Server服务器,并在服务器中建立需要的表和存储过程。NET SDK提供了两个脚本来简化这个工作:InstallSqlStatesql和UnInstallSqlStatesql。这两个文件存放在下面路径中:
c:\windows\MicrosoftNET\Framework
要配置SQL Server 服务器,可以在命令行中运行SQL Server提供的命令行工具osqlexe
osql -s [server name] -u [user] -p [password]
例如:
osql -s (local) -u as -p “”-i InstallSqlStatesql
做好必要的数据库准备工作后,将webconfig文件中的sessionstate元素的mode属性改为”sqlserver”,并指定 SQL连接字符串。具体如下:
mode=”SQLServer”
sqlConnectionString=”data source=127001;userid=sa;password=;Trusted_Connection=yes”
使用SQLServer模式处了可以使Session的状态不依赖于IIS服务器之外,还可以利用SQL Server的集群,使状态存储不依赖于单个的SQL Server,这样就可以为应用程序提供极大的可靠性。
以上就是关于java,如何把session保存到数据库里面全部的内容,包括:java,如何把session保存到数据库里面、iis 负载均衡 如何保存session状态、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)