【问题标题】:Why Do we use Session() state instead of global variables in ASP.NET? what is the point?为什么我们在 ASP.NET 中使用 Session() 状态而不是全局变量?有什么意义?
【发布时间】:2015-07-02 11:50:35
【问题描述】:

为什么我们在 ASP.NET 中使用 Session() 状态对象在任何用户的整个会话期间存储和检索数据?为什么不使用全局变量而不是 session()....类似地 View() 状态来存储和访问页面内任何位置的数据...为什么这个功能存在,而我们可以简单地将数据存储在变量中并在任何地方访问它需要吗?请说明

【问题讨论】:

  • 因为 HTTP 是无状态的。每个新请求都只是一个新请求。会话变量、应用程序变量、缓存——这些都是为无状态架构提供某种“状态”的方式。
  • 是时候了解 asp.net 的无状态特性了 :) 。 here

标签: asp.net viewstate session-state


【解决方案1】:

我遇到的一个答案是,在 Page PostBack 发生期间,变量可能会变为空,因此变量中的数据会丢失。因此我们使用状态来访问数据。

【讨论】:

    【解决方案2】:

    您可以在应用程序的任何地方使用会话值,并且可以在单个页面上使用全局变量。每当页面刷新时,全局变量的值变为空,但会话值将保持原样。

    【讨论】:

      【解决方案3】:

      会话、视图状态和全局对象这 3 个概念执行相同的工作,即保存和访问值。

      主要区别在于说明分配给变量的此值的范围。下面的定义也会向你解释。

      1> 全局变量:全局变量的范围(通过单例模式或应用程序状态声明)具有应用程序范围。 IE;分配给此变量的值将可在所有会话中访问,并且在所有会话和所有页面的某个时间点都相同。这些值存储在 .NET Framework 公共语言运行时中,并且在应用程序中是相同的。 例如:连接字符串、数据库名称等。

      2> 会话状态:分配给会话状态对象的值将仅适用于该会话(直到您执行 session.abondon)。 例如:当您登录网站时,该网站可能会将您的登录 ID 存储在会话变量中。在您注销之前,所有页面都可以访问此会话变量。

      3> 视图状态:视图状态的范围是页面和后续的回发。一旦您导航到不同的页面,这些值就消失了。这主要用于存储可以在回发后使用的计算值。此外,ASP.net 在内部使用 viewstate 在回发后填充控件值。 视图状态是页面级别的状态管理。

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 2013-09-13
        • 1970-01-01
        • 2015-06-25
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 2022-08-13
        • 1970-01-01
        相关资源
        最近更新 更多