【问题标题】:Where are the session variables saved?会话变量保存在哪里?
【发布时间】:2010-12-24 12:35:18
【问题描述】:

会话变量究竟保存在哪里?饼干?服务器内存?

应用程序变量保存在哪里?

【问题讨论】:

  • 这似乎不止一个问题。
  • @Chris:可能是。有关系吗?

标签: asp.net session memory session-variables


【解决方案1】:

放入 Session 的变量存储在配置的 SessionStateProvider 配置为存储它们的任何位置。

默认的SessionStateProvider使用所谓的进程中 (InProc) 会话,其存储位置在服务器内存中,在 ASP.NET 工作进程的内存空间内。

您可以配置自己的SessionStateProvider 以将会话变量存储在数据库中的其他位置,例如进程外。

应用程序变量存储在ApplicationState 中,它也存储在 ASP.NET 工作进程的内存空间中。与会话状态不同,应用程序状态适用于所有用户和会话。据我所知,没有将 ApplicationState 存储在其他地方的配置;如果您需要存储大量应用程序数据,那么您可能需要查看ASP.NET Caching

【讨论】:

  • 您能否提供一个示例,我如何将自己的会话变量存储在其他地方?会话变量还可以以相同的方式访问吗?
  • @NevilleNazerane 查看system.Web 程序集中的内置SqlSessionStateStore;在 Reflector、DotPeek 或类似工具中打开它,看看它是如何实现的。或者,您可以在这里了解如何实现一个 github.com/dnauck/AspSQLProvider/blob/master/src/…,它是存储在 Postgres 数据库中的 Sql Session 的实现
  • 我从this answer 得到了我需要的东西。它有很好的解释。谢谢
  • 我们可以将会话变量存储在服务器的硬盘上吗? #interviewQuestions
  • @Lakshay 您可以通过编写自己的SessionStateProviderSession 存储在任何您喜欢的地方
【解决方案2】:

会话变量应用程序变量一样存储在服务器内存和磁盘上。

来自ASP.NET documentation

ASP.NET 会话状态支持几种 会话变量的存储选项。 每个选项都被标识为 会话状态模式类型。默认 行为是存储会话变量 在 ASP.NET 的内存空间中 工作进程。但是,您也可以 指定会话状态应该是 存储在单独的进程中,在 SQL 中 服务器数据库,或自定义数据 资源。如果你不想要会话 为您的应用程序启用的状态, 您可以将会话模式设置为关闭。

【讨论】:

    【解决方案3】:

    对于 InProc 会话,变量本地存储在 ASP.NET 工作进程的内存中。应用程序状态也是如此。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2014-07-12
      • 2012-02-20
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多