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


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

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

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

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

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

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

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

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

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

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

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

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

    式有几种

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

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

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

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

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

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

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

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

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

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

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

    值。通过访问 System.Web.SessionState.HttpSessionState.Mode 属性的值,可以查看当前选定的会话状态。

    详细请参考:

    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

  • 相关阅读:
    版本控制 version control
    URL URI
    能用上的收藏
    函数式语言简介(functional language)
    h5触摸事件-判断上下滑动
    地理定位
    web存储
    jquerymobile tap事件被触发两次
    关于button的onclientclick事件和onclick事件
    .net 后台给html控件赋值
  • 原文地址:https://www.cnblogs.com/jackhuclan/p/1274722.html
Copyright © 2020-2023  润新知