现在的位置: 首页 > 综合 > 正文

从ASP.NET 会话状态谈IReadOnlySessionState,IHttpSessionState,IRequiresSessionState

2012年12月12日 ⁄ 综合 ⁄ 共 1851字 ⁄ 字号 评论关闭

     ASP.NET 会话状态使您能当用户在构成 Web 应用程序的不同 ASP.NET 页面之间导航时,为用户存储和检索值。HTTP

是无状态协议,这意味着 Web 服务器将页的每个 HTTP 请求都当作相互无关的请求进行处理;默认情况下,服务器不保留上

一个请求期间使用的变量的值的任何信息。因此,如果要想生成需要维护某些跨请求状态信息的 Web 应用程序(如实现购物

车、数据滚动等的应用程序),就可能会非常困难。ASP.NET 会话状态将有限时间段内从同一个浏览器接收到的请求标识为一

个会话,并在该会话持续期间保留变量的值。

     默认情况下,所有的 ASP.NET 应用程序都启用 ASP.NET 会话状态。使用 属性(将会话变量的值存储为按名称

索引的集合)可方便地设置和检索 ASP.NET 会话状态变量。例如,下面的代码示例创建会话变量 FirstNameLastName

来表示用户的名和姓,然后将它们设置为从 控件中检索出的值。

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

 

     ASP.NET 默认情况下将会话信息存储在 ASP.NET 应用程序的内存空间。您可以使用一个独立的服务存储会话信息以便重新

启动 ASP.NET 应用程序后会话信息仍然保留;或将会话信息存储在 SQL Server 中以便会话信息可供网络场中的多个 Web 服

务器使用(重新启动 ASP.NET 应用程序后会话信息也会保留);或将会话信息存储在自定义数据存储区。ASP.NET 会话状态模

式有几种

 

     ASP.NET 会话状态支持若干用于会话数据的存储选项。每个选项都由 枚举中的一个值标识。下面的列表

描述了可用的会话状态模式:

  • 模式,此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。

  • 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用

  • 程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。

  • 模式将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态,

  • 并让会话状态可用于网络场中的多个 Web 服务器。

  • 模式,此模式允许您指定自定义存储提供程序。

  • 模式,此模式禁用会话状态。

通过在应用程序的 Web.config 文件中为 元素的 mode 属性分配一个 SessionStateMode 枚举值,可以指定要

让 ASP.NET 会话状态使用的模式。除了 InProcOff 之外,其他模式都需要附加参数,例如将在本主题后面讨论的连接字符串

值。通过访问 属性的值,可以查看当前选定的会话状态。

 

详细请参考:

ms-help://msdn/0bb0a3a3-650f-4c47-a0c5-b08b9b591bb4.htm

 

     了解了asp.net的会话管理,那我们来看看今天要谈到的主题:

IReadOnlySessionState,IHttpSessionState,IRequiresSessionState

IHttpSessionState 定义协定以实现自定义会话状态容器。
IReadOnlySessionState 指定目标 HTTP 处理程序只需要具有对会话状态值的读访问权限。这是一个标记接口,没有任何方法。
IRequiresSessionState 指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。这是一个标记接口,没有任何方法。

 

     我们常常在自定义处理程序(ashx)中要访问或设置session里面的值,如在购物车程序中,通过Ajax调用自定义处理程序时,我们可能根

据用户不同的级别,选择不同的物品,实现不同的折扣等等。这个时候在这个自定义处理程序中,需要读取会话中的用户信息,读写购物车里

面的物品信息等等。如果不标识上IReadOnlySessionState,或IRequiresSessionState接口的话,我们就不能访问到我们需要的信息。

因此大家可以看到这几个标识接口的重要性了。

 

     如果在你的自定义程序中只需要对会话状态值读权限的话,标识IReadOnlySessionState就可以了

     如果在你的自定义程序中需要对会话状态有读并且有写权限的话,标识IRequiresSessionState

     如果这些两个接口不能满足你的要求,实现IHttpSessionState这个接口。可以参考:msdn

 

 

抱歉!评论已关闭.