在网站中,经常使用到配置文件,一般有全局配置文件和局部配置文件,全局文件一般在Web.Config文件中配置,当然,也有在Global.asax中配置的。
下面给大家讲述的是,会话状态中的SESSION的保存时间的问题,这得使用到sessionState节点。
本例子使用到的配置方式,选择的是Web.Config文件。请注意,sessionState节点添加在</system.web>和</configuration>两个节点内部的任何一个位置都可以,简单的配置代码如下:
<sessionState mode="InProc" cookieless="false" timeout="10"/>
代码解释:
mode="InProc" 使用内存的方式来保存会话状态。
cookieless="false" 不启用cookieless
timeout="10" session会话状态保存的时间为10分钟,这里可以自行修改而用之。
当然,关于会话状态的保存方式及各种参数,详情请看下文:
ASP.NET 2.0提供了哪些存储SessionID的模式呢?
Cookie(默认)。如果客户端禁止了Cookie的使用,Session也将失效。
URL。Cookie是否开启不影响Session使用,缺点是不能再使用绝对链接了。
前面说了SessionID可以存储在客户端的Cookie或者URL中,那么Session真正的内容存储在哪里呢?ASP.NET 2.0对于Session内容的存储也提供了多种模式。
mode属性设为Off
和从前的ASP一样,ASP.NET的会话状态管理是要产生开销的。所以,假如某个网页不需要访问
Session对象,开发者应将那个页的Page预编译指令的EnableSessionState属性设为False。
要为整个网站禁用会话状态,可在Web.config文件中将sessionState元素的mode属性设为Off。
为了克服inproc 模式的缺点, ASP.NET 提供了两种进程外保存会话状态的方法。
mode属性设为InProc(默认)
Session存储在IIS进程中(Web服务器内存)。
mode属性设为StateServer
Session存储在独立的Windows服务进程中(可以不是Web服务器)。
mode属性设为SqlServer
Session存储在SqlServer数据库的表中(SqlServer服务器)。
虽然InProc模式的Session直接存储在Web服务器IIS进程中,速度比较快,但是每次重新启动IIS都会导致Session丢失。利用后两种模式,我们就完全可以把Session从Web服务器中独立出来,从而减轻Web服务器的压力,同时减少Session丢失的概率。
因此,SessionID存储在客户端(可以是Cookie或者URL),其他都存储在服务端(可以是IIS进程、独立的Windows服务进程或者SQL Server数据库中)。
如上的四种模式性能的比价,存在如下优点及缺点:
InProc:最快,但是session数据越多,web服务器上消耗的内存也越多,它可能影响性能。
StateServer:当存储基本类型(如string,integer等)数据时,在同一个测试环境中它比InProc慢15%。如果你存储大量对象,序列化和反序列化可能影响到性能。
SQLServer:当存储基本类型(如string,integer等)数据时,在同一个测试环境中它比InProc慢25%。它也有与StateServer一样的序列化性能问题。