ASP.NET状态管理——Session篇

来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:33:35
ASP.NET状态管理——Session篇
在Web开发的早期,Web页面彼此是相互独立的。它们很少需要了解其他页面的内容(如果需要了解,一般通过查询字符串或通过Form的方式传递)。随着Internet的发展,Web页面也变得更加复杂,仅仅浏览一个页面查看它的内容是远远不够的。现在的Web站点的设计都希望考虑工作流的问题——即需要从一个页面移动到另一页面。
因此会话状态(Session State)就应运而生。会话状态变量允许Web页面保存和用户浏览器的具体一次“会话”的相关的信息。在同一次会话中接下来的页面可以按需要引用这些会话变量。该信息被绑定到用户浏览器会话。一旦浏览器会话关闭,该信息就被删除。该信息存储在Web服务器上,在客户端浏览器的所有调用中都是一种保存的。
当回送发生时,ASP.NET能够使用它在用户第一次连接时创建的唯一的SessionID(SessionID是在服务器上对客户端浏览器唯一的标识,每个客户端浏览器有一个对应的SessionID)来检索会话信息(如果浏览器支持Cookie,并且ASP.NET Web页面配置为使用Cookie);或者通过被ASP.NET追加到URL中的一个加密的字符串来检索会话信息(对于浏览器不支持Cookie或者ASP.NET Web 页面配置为不使用Cookie的情况)。
Session在web.config的配置:
...
Session的存储模式:InProc,StateServer,SQL Server,Custom,Off.默认存储和模式为InProc。
InProc 模式,此模式将会话状态存储在 Web 服务器上的内存中,将会话状态值和变量存储在本地 Web 服务器上的内存中。
StateServer模式,将会话状态存储在一个名为 ASP.NET状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。使用该模式需设定ASP.NET状态服务为启动。ASP.NET状态服务进程是独立于 ASP.NET 辅助进程或 IIS 应用程序池的单独进程。使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。若设置StateServer模式,需设置stateConnectionString属性。如:

SQLServer模式将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。若要使用 SQLServer 模式,必须首先确保在 SQL Server 上安装了 ASP.NET 会话状态数据库。
Custom 模式,此模式允许您指定自定义存储提供程序。
Off 模式,此模式禁用会话状态。
在ASP.NET中,Session是一个带有方法和属性的.NET对象,可以在一个.NET会话状态对象中存储任何数据类型(包括用户定于的类和结构)。但是,存储数据也是以性能为代价,代价的大小取决于保存会话信息的多少,还是数据的类型信息。
简单示例
创建两个页面:一个页面(SessionAdd.aspx)来添加Session的Key和Value,另一个(SessionResult.aspx)来显示Session的信息。
SessionAdd的代码:
Session Variable:
Value:
  后台代码: protected void btnAdd_Click(object sender, EventArgs e){Session[txtSessionVariable.Text] = txtSessionValue.Text;}protected void banView_Click(object sender, EventArgs e){Server.Transfer("SessionResult.aspx");} 页面效果:    SessionResult.aspz页面:

  后台代码: protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){StringBuilder sb = new StringBuilder();foreach (String strKey in Session.Keys){sb.Append(strKey);sb.Append("=");sb.Append(Session[strKey]);sb.Append("\n");}txtSessionResult.Text = sb.ToString();}}protected void btnBack_Click(object sender, EventArgs e){Session.Clear();Server.Transfer("SessionAdd.aspx");} 页面效果:   以上的列子简单说明Session的添加,查看,清空。 基于性能的考虑,Session不应该存储任何依赖于外部链接性或关键资源的内容。 Tag标签:ASP.NET,性能,Session