.net程序中 session超时过快的问题


用的.NET 4.0的框架 ,但是后台管理中的SESSION很容易丢失,登录后台如果很快进行操作的话没问题,如果超过30秒的样子就报”未将对象引用设置到对象的实例”

可以在web.config中添加( <System.web>标记下):
<sessionState mode="StateServer"      stateConnectionString="tcpip=127.0.0.1:42424"     cookieless="false" timeout="20" />

 Inproc是缺省的设置 比较容易出现丢失

它允许“无Cookie”的会话,以及在服务器之外存储 会话数据。ASP.NET会话状态模块在Web.config文件中像下面这样配置: 在这个例子中,mode属性设为InProc(默认值),表明会话状态要由ASP.NET存储到内存中,而且 不用Cookie来传递会话ID。相反,会话ID要直接插入一个网页URL的查询字符串中。例如,采用 InProc模式并建立一个会话之后,调用一个假想的ASP.NET网页时,需要采用下面这样的URL: http://my.website.com/(12mfju55vgblubjlwsi4dgjq)/education.aspx 圆括号中长长的字母、数字字符串就是会话ID。ASP.NET引擎从查询字符中提取会话ID,并将用户 请求与特定会话联系起来。采取这种方式,不管Cookie还是隐藏表单字段都用不着了。 所以,即使网页中没有使用表单,也能加入会话。 但是这种方法,应用程序的状态将依赖于 ASP.NET进程, 当IIS进程崩溃或者正常重启时,保存在 进程中的状态将丢失。

 mode属性设为Off

和从前的ASP一样,ASP.NET的会话状态管理是要产生开销的。所以,假如某个网页不需要访问 Session对象,开发者应将那个页的Page预编译指令的EnableSessionState属性设为False。 要为整个网站禁用会话状态,可在Web.config文件中将sessionState元素的mode属性设为Off。 为了克服inproc 模式的缺点, ASP.NET 提供了两种进程外保存会话状态的方法。

StateServer会话管理

将mode属性设为StateServer,也就是将会话数据存储到单独的内存缓冲区中,再由单独一台机器上运行 的Windows服务来控制这个缓冲区。状态服务全称是“ASP.NET State Service ”(aspnet_state.exe), 它由Web.config文件中的stateConnectionString属性来配置。该属性指定了服务所在的服务器,以及要监 视的端口: 在这个例子中,状态服务在一台名为myserver的机器的42424端口(默认端口)运行。要在服务器上改变 端口,可编辑HKLM\SYSTEM\CurrentControlSet\Services\aspnet_state注册表项中的Port值。 显然,使用状态服务的优点在于进程隔离,并可在Web farm中共享。 使用这种模式,会话状态的存储将不依赖于iis进程的失败或者重启,然而,一旦状态服务中止,所有会话数据都会丢失。换言之,状态服务不像SQL Server那样能持久存储数据;它只是将数据存储在内存中。
嗯,我的梦想就是被读者的稿费包养~~如果觉得有用/受益,请点赞or打赏--1元就足够感动我 =^_^=
赞 (1)
打赏 支付宝打赏 微信打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:chei580@west.cn。文章观点不代表本站立场。本站原创内容未经允许不得转载。

clens

记录点滴技术,分享互联信息!转载内容,素材等大多来源网络,会尽量标明原作者,若有侵犯请告知会在第一时间删除。

说点什么

Please Login to comment
avatar
  Subscribe  
提醒