ASP.NET中如何正确使用Session

  ASP.NET中的Session要比ASP中的Session灵活和强大很多,同时也复杂很多;看到有一些ASP.NET开发人员报怨说Session不稳定,莫名其妙的丢失,其实这正是ASP.NET改进的地方之一。

  我们知道Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的。

  在传统web编程语言(比如ASP)中,session的过期完全是按照TimeOut来老老实实处理的,超时值默认是20分钟,但问题是:通常有很多用户只看一眼网页,然后就关浏览器走人了,这种情况下,服务端内存里还长久保存着Session的数据,如果这种用户很多,对服务器资源无疑是一种浪费。

  而在ASP.NET中,Session的存储策略有好几种:

  默认情况下,系统采用的是InProc模式,即进程内模式。这种情况下,Session是保存在ASP.NET工作进程映射的内存中的,问题是ASP.NET工作进程为了维护良好的平均性能,会被系统经常回收。我们在IIS里可以配置自动回收(比如按时间周期回收,或者当内存使用达到多少值时自动回收),如下图即为IIS7中配置应用程序池回收参数的界面:

  当ASP.NET工作进程被回收时,其映射的内存全部被清空并初始化,以便其它程序可以使用,所以Session也跟着一并消失了,就这是为什么Sesssion会无故消失的主要原因。

  当然默认的InProc模式也是性能最高的一种模式,如果您不能忍受这种“不稳定”,可以在web.config中把mode设置为StateServer模式:

<sessionState  mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"></sessionState>        
        

NET技术ASP.NET中如何正确使用Session,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。