ASP.NET Session长时间未操作失效附解决方法

2019年6月26日18:43:34 评论 74
摘要

ASP.NET Session长时间未操作失效,原因竟是IIS有一个回收机制,小编来总结一下顺便附解决方法,有需要的小伙伴可以学习一下。

起因

今天码代码的时候,发现还没怎么操作session就丢失了,想起了日常web.config配置就OK了。

  1. <system.web>
  2.         <!--设置Session过期时间是30分钟-->
  3.         <sessionState mode="InProc" timeout="30"/>
  4. </system.web>

但是后来发布到IIS后,也会出现这种情况,经过度娘的帮助,终于找到了解决方法,原来IIS也有一个回收机制,需要自己去IIS配置。

原理

ASP.NET 默认的 session state 模式是 in proc(进程内),数据是在网站的应用程序池里面保存的。这样在 web.config 设置的超时时间,是在应用程序池没有发生回收的基础上才是有效的。

解决

需要修改IIS的这两个配置

ASP.NET Session长时间未操作失效附解决方法

回收→固定时间间隔(分钟)/进程模型→闲置超时(分钟),这两项的默认设置大概是二十或三十分钟的样子。也就是说,在应用程序池的运行时间达到设置的间隔,应用程序池会发生回收,session 会被清空;在网站空闲,即没有请求的时间达到设置值,应用程序池会发生回收,session 会被清空。

这种回收的行为在一个正式运营的网站上面,是很不合适的。个人觉得 IIS 的默认值是这样也有点奇怪,因为默认值应该是一个最通用,适合最多人的一种设置,这两项的默认值显然不是。可能 windows 毕竟是最流行的桌面系统,考虑到回收可以节省资源,不影响其他的工作任务,才这样设置的吧。服务器一般都是单一的工作任务,不进行回收带来的价值,明显是高于所消耗的资源的。

所以,如上面的截图所示,建议把这两项都设置为 0,禁用这两种回收行为。

weinxin
微信公众号
博客微信公众号,欢迎关注。
不忘初心 牢记使命

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: