ASP.NET中的会话状态模式详解

2018年09月18日 浏览量:45

在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服务器。

评论区:

昵称:
内容:
验证码:  9684