对ASP.NET站点的更改是否会终止活动会话?

时间:2009-12-28 07:59:19

标签: asp.net asp.net-mvc upgrade

我担心用户会话被扫除的可能性。我正在使用默认的ASP.NET会话对象和会话cookie。我知道会话可以超时,我已经将会话的超时值设置为几个小时,以避免意外超时。

但至少有两个我担心的案例。

(1)据我所知,ASP.NET会定期回收运行网站/网络应用程序的应用程序域(不确定我的所有术语是否正确)。在这些回收活动中进行会话吗?

(2)至少在我的开发服务器上,我对网站所做的某些更改(例如,添加新页面)似乎会导致活动会话在重新编译网站(或部分网站)时丢失。这种情况似乎不会随着每次变化而发生,但有很多变化。我特别关注这对于我的网站上线时可能发生的变化意味着什么。我想知道我可以更新的规则,而不会导致活动会话被杀死。

感谢您的任何指示。

3 个答案:

答案 0 :(得分:12)

这取决于您的会话状态模式。以下是您可以在Microsoft Support找到的内容的副本:

  

ASP.NET支持三种模式   会话状态:

     
      
  • InProc :In-Proc模式将值存储在ASP.NET的内存中   工人流程。因此,这种模式提供   最快速地访问这些值。   但是,当ASP.NET工作者   过程循环,状态数据是   丢失。
  •   
  • StateServer :或者,StateServer模式使用独立服务器   要存储的Microsoft Windows服务   会话变量。因为这   服务独立于Microsoft   它是Internet Information Server(IIS)   可以在单独的服务器上运行。您可以   使用此模式进行负载平衡   解决方案因为多个Web服务器   可以共享会话变量。虽然   会话变量如果你没有丢失   重启IIS,性能受到影响   当你跨越流程边界时。
  •   
  • SqlServer :如果你非常关注持久性   会话信息,您可以使用   SqlServer模式利用Microsoft   SQL Server确保最高级别   可靠性。 SqlServer模式是   类似于进程外模式,除了   会话数据保持在   一个SQL Server。 SqlServer模式也   使您可以使用状态存储   它位于IIS进程之外   那可以位于当地   计算机或远程服务器。
  •   

如果使用StateServer或数据库,当IIS检测到网站发生更改时,会话数据不会丢失。

答案 1 :(得分:3)

(1)如果您在回收应用程序池时使用进程内会话模式,您将丢失会话信息

(2)取决于您的asp.net应用程序使用Web应用程序或网站模型。某些文件在应用程序启动时缓存,如果更改则需要重新启动或重新编译。经验法则是,如果您更改Global.asax,添加,删除或编辑\ bin文件夹中的文件的配置文件,将发出应用程序的重新启动,并且In Process Session数据将丢失。

ASP.NET Session有许多缺陷,许多开发人员根本不使用它。我个人更喜欢将数据存储在SQL Server中的自定义表中(如果可用)。

如果您想提供更多信息,例如您拥有的IIS版本,是使用网站还是Web应用程序模型,您是否有可用的数据库服务器,是使用Web场还是Web园服务器环境,以及有哪些信息你想存储以及我可以给你多长时间的具体建议。

答案 2 :(得分:0)

如果您正在使用InProc模式,那么如果AppPool回收,您将丢失会话数据,这可能每天发生一次(根据默认计划),或者在服务器上大约20分钟不活动后发生。< / p>

关于页面更新:每次更改实际站点上的文件时,站点都有可能重新启动,就像您更改了web.config一样。某些文件不会导致完全重启,但预测哪些文件并不容易,而且还取决于您正在使用的编译模式(批处理或不批处理)。如果您使用默认的每文件夹批处理编译模式,则应该能够在不强制重新启动的情况下更改子文件夹中的各个页面。但是,对主页面,代码或控件的更改可能会导致重新启动,因为可以更改顶级文件夹(取决于您在那里还有其他内容)。

我想我应该补充说,改变现场网站上的个别文件通常不是一个好主意 - 虽然我确信你有理由这样做。