开发asp.net应用时,修改web.config中的SessionState节点。web
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/>
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/>
InProc模式
优势:获取session状态的速度快,session状态直接存储在iis的进程中。
缺点:易丢失,常常须要从新登陆 sql
StateServer模式
优势:session状态单独存储在一个进程中,不会由于iis或者应用的重启而丢失状态
缺点:获取session状态的速度比InProc慢一些,毕竟是两个不一样的进程。 服务器
在开发的时候,对应用有一点修改,就会致使应用的重启,这时候若是使用InProc模式
,那么每次都须要从新登陆,比较浪费时间.建议使用StateServer模式。并在iis里面设置超时时间长一些。 cookie
注:使用StateServer模式的时候
一、要开启“ASP.NET State Service”服务(设为“自动”) session
二、若是stateConnectionString的值不是127.0.0.1或者localhost等表明本地地址的值,须要修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为容许远程电脑的链接,0 表明禁止)→ 设置 Port (端口号) asp.net
三、session中存储非序列化的对象,若是违反会抛出 没法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,所以不容许使用没法序列化的对象或 MarshalByRef 对象。若是自定义会话状态存储在“Custom”模式下执行了相似的序列化,则适用一样的限制。这样的异常。若是向session存储自定义的对象,那么该对象的类上必定要加上[Serializable]注释。less
inProc模式(缺省模式)tcp
它容许“无Cookie”的会话,以及在服务器以外存储会话数据。ASP.NET会话状态模块在Web.config文件中像下面这样配置:spa
<sessionState mode="InProc" cookieless="false" timeout="20" />
在这个例子中,mode属性设为InProc(默认值),代表会话状态要由ASP.NET存储到内存中,并且不用Cookie来传递会话ID。采起这种方式,无论Cookie仍是隐藏表单字段都用不着了。.net
因此,即便网页中没有使用表单,也能加入会话。 可是这种方法,应用程序的状态将依赖于 ASP.NET进程, 当IIS进程崩溃或者正常重启时,保存在
进程中的状态将丢失。