ASP.NET中Session的sessionState 4种mode模式

本文详细介绍了ASP.NET中Session的sessionState的四种模式:Off、InProc、StateServer和SqlServer,包括各自的特点、优缺点及配置注意事项。InProc模式速度快但易丢失,StateServer模式独立存储但较慢,SqlServer模式持久化存储适用于NLB环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.NET中Session的sessionState 4种mode模式

在ASP.NET中Session的sessionState的4中mode模式:Off、InProc、StateServer及SqlServer。

Off模式

  1. 关闭模式,即不需要使用Session
  2. 单个页面关闭Session:<%@ Page EnableSessionState="false" %>
<configuration>
	<system.web>
		<sessionState mode="Off"></sessionState>
	</system.web>
</configuration>

InProc模式(缺省模式)

  1. mode设置为"InProc"时,Session直接存储在IIS进程中。
    优点:获取session状态的速度快
    缺点:易丢失
  2. mode为InProc可能造成Session丢失的情况:
    ASP.NET进程(aspnet_wp.exe)、IIS进程(w3wp.exe)默认的20分钟重启应用程序;
    缓冲池填满后重启;
    进程保护措施重启。
<configuration>
	<system.web>
		<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>
	</system.web>
</configuration>

StateServer模式

  1. mode设置为"StateServer"时,Session 存储在单独的内存缓冲区中,再由单独一台服务器上运行的ASP.NET State Service(aspnet_state.exe)来控制这个缓冲区。
    优点:1.session状态单独存储在一个进程中,不会因为iis或者应用的重启而丢失状态。
    缺点:1.由于是两个不同的进程,获取Session数据比InProc慢;2.Session数据存储在内存中,重启ASP.NET State Service服务,Session数据将丢失。
  2. 以上设置的ASP.NET State Service在127.0.0.1的42424端口(默认端口)上运行,要在服务器上改变端口,可编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注册表项中的Port值。(打开注册表方式:运行 regedit)
  3. mode设置为"StateServer"需要注意:
    1.启动ASP.NET State Service;
    2.如果stateConnectionString的值不是127.0.0.1或者localhost等代表本地地址的值,需要修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许远程电脑的连接,0 代表禁止)→ 设置 Port (端口号)
<configuration>
   <system.web>
   	<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" 
   		cookieless="false" timeout="20"></sessionState>
   </system.web>
</configuration>

SqlServer模式

  1. mode设置为"SqlServer"时,Session存储在SQL Server数据库中持久化保持,ASP.NET尝试将会话数据存储到由sqlConnectionString属性(其中包含数据源以及登录服务器所需的安全凭证)指定的SQL Server中。可应用场景:网络负载均衡(NLB)环境
    设置SqlServer模式步骤:
    1.配置SQL erver创建ASPState数据库
    创建ASPState数据库,运行C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql,可以通过SQL查询分析器来执行语句,也可以使用sqlcmd来执行
     sqlcmd -S [server name] -U [user] -P [password] -i    c:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql
     此时SQLServer会创建数据库ASPState,但是没有表。
     若创建ASPState数据库后要删除,可以运行    c:\Windows\Microsoft.NET\Framework\v4.0.30319\UninstallSqlState.sql,但要先停止w3svc进程。
     net stop w3svc
    2.ASPState创建表
     aspnet_regsql.exe -ssadd -sstype p -S [server name] -U [user] -P [password]
     运行cmd:
     C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -ssadd -sstype p -S (local) -U sa -P ‘1’
     此时数据库中创建两张表:ASPStateTempApplications、ASPStateTempSessions。
     由于数据不存储在本地内存,存储Session状态的对象需要进行序列化和反序列化,以便通过网络传给数据库服务器,以及从数据库服务器传回
<configuration>
	<system.web>
		<sessionState mode="SQLServer" sqlConnectionString="data 
			source=127.0.0.1;user id=sa;password=1" cookieless="false" timeout="20">
		</sessionState>
	</system.web>
</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值