ASP.NET:Session对象是否是静态变量的可接受解决方案?

时间:2011-06-10 20:54:44

标签: asp.net session session-variables

我已经阅读了关于这个主题的几个主题,需要对我在书中读到的一些句子做一些澄清:

如果您在进程中存储会话状态,则您的应用程序不是可伸缩。原因是Session对象存储在一个特定的服务器上。因此,在进程中存储会话状态不适用于Web场

  1. 第一句中的“可扩展”是什么意思?
  2. 第三句是否意味着如果我的应用程序位于共享的Web主机上,我不应该使用Session [“myData”]来存储我的东西?如果是这样,我该怎么用?
  3. 感谢。

2 个答案:

答案 0 :(得分:2)

1:

this sense中的可扩展性:

  

系统,网络或流程能够以优雅的方式处理不断增长的工作量或能够扩大以适应这种增长的能力。[

2:

在SQL Server中使用会话服务器或存储会话,这些会话描述为here

答案 1 :(得分:1)

ASP.NET可以在服务器端的3个可能位置存储应用程序的所有组合会话信息(“会话状态”)(客户端cookie也可以,但这是另一回事):

  • “InProc”(正在处理中),表示在附加到asp.net工作进程的IIS服务器的内存中,
  • “StateServer”,这是一个单独的进程,可由多个IIS服务器访问但仍将会话状态存储在内存中,并且
  • “SQLServer”,用于将会话状态存储在SQL Server数据库中。

1)进程内不可扩展的原因是,如果您的需求超过单个IIS服务器的容量,则多个服务器无法使用进程内会话状态。如果您已确定共享主机方案将满足您的需求,则无需担心。

2)当您在Session["Name"]中存储内容时,ASP.net会将数据存储在应用程序配置为存储会话状态的任何位置。如果要更改存储会话状态的位置,您只需配置web.config文件即可。如果您使用的是共享托管环境,那么您的IIS部署将被视为单个服务器,即使实际服务器无疑位于某种服务器场中。

请参阅:MSDN Session-State Modes