网站链接: 我爱捣鼓
当前位置: 首页 > web开发 > Asp.net/C#

ASP.NET中Session的sessionState 4种mode模式有什么区别?

2022/11/12 11:32:16

Session在我们开发ASP.NET项目时会经常用到,但在我们却很少知道在设置ASP.NET中Session的sessionState的4中mode模式:Off、InProc、StateServer及SqlServer到底有什么区别,今天我们就来说说4种模式的区别。sessionState的4种mode模式  在ASP.NET中Session的sessionSt…

      Session在我们开发ASP.NET项目时会经常用到,但在我们却很少知道在设置ASP.NET中Session的sessionState的4中mode模式:Off、InProc、StateServer及SqlServer到底有什么区别,今天我们就来说说4种模式的区别。

  • sessionState的4种mode模式

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

1、Off模式

<sessionState mode="Off"></sessionState>

  关闭模式,即不需要使用Session。

  单个页面关闭Session:

<%@ Page EnableSessionState="false" %>

2、InProc模式(缺省模式)

<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>

  mode设置为"InProc"时,Session直接存储在IIS进程中。

  优点:获取session状态的速度快

  缺点:易丢失

  mode为InProc可能造成Session丢失的情况:

  1>. ASP.NET进程(aspnet_wp.exe)、IIS进程(w3wp.exe)默认的20分钟重启应用程序;

  2>. 缓冲池填满后重启;

  3>. 进程保护措施重启。

3、StateServer模式

  mode设置为"StateServer"时,Session 存储在单独的内存缓冲区中,再由单独一台服务器上运行的ASP.NET State Service(aspnet_state.exe)来控制这个缓冲区。

  优点:session状态单独存储在一个进程中,不会因为iis或者应用的重启而丢失状态。

  缺点:

  1>. 由于是两个不同的进程,获取Session数据比InProc慢;

  2>. Session数据存储在内存中,重启ASP.NET State Service服务,Session数据将丢失。

<sessionState mode="StateServer" stateConnectionString="tcpip=tcpip=127.0.0.1:42424" cookieless="false" timeout="20"></sessionState>

  以上设置的ASP.NET State Service在127.0.0.1的42424端口(默认端口)上运行,要在服务器上改变端口,可编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注册表项中的Port值。(打开注册表方式:运行 regedit)

  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 (端口号) 

4、SqlServer模式

  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。

  3>. 设置sessionState

<sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1;user id=sa;password=1" cookieless="false" timeout="20"></sessionState>

  由于数据不存储在本地内存,存储Session状态的对象需要进行序列化和反序列化,以便通过网络传给数据库服务器,以及从数据库服务器传回。

        通过以上内容我们知道了ASP.NET中Session的sessionState 4种mode模式的区别。感谢您访问“我爱捣鼓(www.woaidaogu.com)”网站的内容,希望对大家有所帮助!引用本文内容时,请注明出处!谢谢合作!

上一篇:C#函数中如何返回多个值?

下一篇:没有了

相关资讯

  • C#函数中如何返回多个值?

    C#项目开发中我们一般定义简单的函数时都会返回一个值,但在实际开发中有时需要返回多个值,那应该怎么办呢?使用 KeyValue 组合static void Main(string[] args){ int int1 = 15; int int2 = 25; var result = Add_Multiply(int1, int2); Console.WriteLine…

    2022/11/8 22:01:13
  • Visual Studio2010代码块区域折叠起来的快捷键CTRL+K+S

    加#region和#endregion的作用主要是 :可以将这块区域的代码折叠起来,便于查看。 快捷键 CTRL + K + S,选第二个。也可以点击鼠标右键选择‘外侧代码’找到它。 必须是成对出现。就像是一对括号。只是不会被编译。 通过以上内容我们知道了Visual S…

    2021/10/18 21:46:33
  • C#如何判断两个时间的大小?

    C#如何判断两个时间的大小? 其实很简单,我们可以通过C#的一个方法就能解决,下面我们就来说说这个方法。 C# 时间比较方法DateTime.Compare public static int Compare(DateTime t1,DateTime t2) 返回值类型:System.Int32 当结果<0时表…

    2021/10/15 21:42:07
  • 如果房东的猫知道这个她就不会再问今天是星期几了!

    房东的猫如果会敲代码,写个这么简单的小程序她就不会成天喊叫"今天是星期几"了。 /// <summary> /// 获得今天星期几的函数 /// </summary> /// <returns></returns> public string GetDayOfWeek(…

    2021/10/15 21:38:13