在ASP.NET中我们都会用到Session,但是Session存在哪里你们知道吗,今天我们就来了解一下。
在ASP.NET中4中存储Session的模式,如下:
1.InProc 模式,此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。 2.StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。 3.SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。 4.Custom 模式,此模式允许您指定自定义存储提供程序。
然后我们可以通过配置Web.config文件来指定Session所使用的模式。如果不配置则默认使用InProc模式。
1.InProc模式
此模式将Session存在本地IIS服务器的内存中,如果程序中需要使用到Session_OnEnd事件,那就必须要使用此模式;由于ASP.NET模式就是此模式,
所以使用此模式不需要在Web.config中进行相关配置。
2.StatServer模式
StateServer模式将Session存储在ASP.NET状态服务的进程中 ,使用此模式,可以保证在重启iis站点之后,Sessino不会丢失。
使用此服务,首先先开启ASP.NET状态服务,在计算机服务里可找到这个服务。
然后在<system.web>节点下加入以下节点配置。
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20"/>
端口42424为默认端口,要在服务器上改变端口,可HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注册表项中的Port值。
如果stateConnectionString的值为其他服务器,则登陆此服务器,修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters节点将 AllowRemoteConnection 的键值设置成1(1代表允许远程连接)然后 设置 Port (端口号)
3.SqlServer模式
使用此模式,首先得安装Sql Server客户端,此模式把Session存到一个数据库中,本站使用的就是此模式;
使用此模式还得建立ASPState数据库,不过创建的数据库的sql语句就在你本机就能找到,目录为:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql
运行此sql语句,数据库就创建好了,不过还没有表,你也不用担心,表也给你准备好,打开cmd窗口,运行如下命令:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -ssadd -sstype p -S (local) -U sa -P '密码'
这样表也给你建好了。然后配置节点。
<sessionState mode="SQLServer" sqlConnectionString="data source=.;user id=sa;password=111111" cookieless="false" timeout="20" />
由于第四种模式Custom我本人没测试过,个人感觉也没太大必要,所以不做描述。
总结:
1.InProc模式:方便,读取速度快,不过由于是存在本机内存中,所以网站访问量过大,势必会给内存很大压力
2.StateServer模式:使用StateServer模式数据也是存于内存中,所以在使用StateServer 模式,我一般为远程服务器处理,这样来解决内存压力,由于是远程服务器,读取数据的速度会比InProc模式慢一点
3.SqlServer模式:使用此模式,数据存于数据库,肯定会减轻内存压力,在没有多余服务器来使用StateServer模式的情况下,此模式为不错的选择,注意此模式也可用于远程SqlServer服务器。