1、进程内会话状态模式(Inproc):当我们新建一个WEB程序后默认的采用的进程内会话状态模式,这也是大家所普遍采用的模式。在这种模式下会话状态存储在本地的 ASP.NET 辅助进程中,可以说到目前为止,进程内会话状态模式可能是最快的访问选项。但会话中存储的数据越多,Web 服务器所消耗的内存就越多,这样会潜在地增加性能降低的风险。
2、.NET 状态服务器模式(StateServer):会话状态存储在远程进程中(例如,名为 aspnet_state.exe的 indows NT 服务中)
3、SQL 模式(SQLServer):会话状态存储到由 SQL Server 管理的专用数据库表中。
.NET 状态服务器模式和SQL 模式都可以称为进程外会话模式,当储存数据时,需要将数据序列化储存到外部储备库,当读取和数据时,需要将数据反序列化,复制到本地会话词典中,所以请求导致性能下降了 15%(进程外)到 25% (SQL Server)。注意这只是一种粗略的估计。但是在进程外存储方案中,会话状态存活的时间较长,使应用程序的功能更强大,因为它可以防止 Microsoft? Internet 信息服务 (IIS) 和ASP.NET 失败。通过将会话状态与应用程序相分离,您还可以更容易地将现有应用程序扩展到 Web Farm 和 Web Garden 体系结构中。另外,会话状态存储在外部进程中,从根本上消除了由于进程循环而导致的周期性数据丢失的风险。
在 SQL Server 模式中,也可以将会话状态配置为在故障转移群集中工作。故障转移群集是两个或更多相同的冗余 Web 服务器,它们将会话数据存储在一台单独的计算机上的 SQL Server 数据库中。如果一个 Web 服务器出现故障,群集中的另一个服务器会接管它的工作,为请求提供服务,会话数据不会丢失。
若要配置故障转移群集,请将 Web 服务器的 Web.config 文件中的 <machinekey> 元素设置为相同的值。
然后将 Web 服务器的 SQL 连接字符串设置为指向计算机上存储会话数据的 SQL Server 数据库。
五、会话状态的访问
你可以直接通过Session集合来实现对会话状态的访问。为了与 ASP 的早期版本兼容,还可以通过应用程序对象上的 Session.Contents 属性来实现对会话状态的访问。