专栏首页smh的技术文章ASP.NET中的会话状态模式详解

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CSS功能强大的选择器

    小明爱学习
  • Web.config中httpModules和httpHandlers的相关配置说明

    Web.config中httpModules和httpHandlers的相关配置说明

    小明爱学习
  • IHttpAsyncHandler实现广播功能

    IHttpAsyncHandler实现广播功能原理:第一次页面加载,发送一个请求到服务器,服务器挂起这个请求,等到有数据之后在返回这个请求,就实现了服务器主动推...

    小明爱学习
  • Spring的设计模式快速入门干货

    设计模式是一套被反复使用的、多数人知晓的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

    全菜工程师小辉
  • 软件架构的10个常见模式

    企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性。因此,了解软件设计中的不同架构模...

    半吊子全栈工匠
  • 设计模式总篇:从为什么需要原则到实际落地(附知识图谱)

    从逻辑学来说,如果机器人完全遵守三大定律及其衍生的条约,那么机器人就可以和人类和平相处,当然也会有意外发生。

    Kerwin
  • 设计模式分类

         在《设计模式》这本书中列举并描述了23种设计模式,分为创建型模式、结构型模式和行为型模式。另外,近来这一清单又增加了一些类别,例如,并发型模式、线程池...

    猿人谷
  • 模式

    公司内部成立了一个设计模式学习兴趣小组,我也怀着空杯心态报了名。新东西不一定让你成长,但是多琢磨、多思考、多探讨一定会让你成长。我们在学习设计模式的时候,但是这...

    只喝牛奶的杀手
  • Pandas-11. 文本操作

    悠扬前奏
  • 哇~这么Deep且又轻量的Network,实时目标检测

    最近挺对不住关注“计算机视觉战队”平台的小伙伴,有段时间没有给大家分享比较硬比较充实的“干货”了,在此向大家表示抱歉,今天抽空之余,想和大家说说目标的实时检测。

    计算机视觉研究院

扫码关注云+社区

领取腾讯云代金券