我担心用户会话被扫除的可能性。我正在使用默认的ASP.NET会话对象和会话cookie。我知道会话可以超时,我已经将会话的超时值设置为几个小时,以避免意外超时。
但至少有两个我担心的案例。
(1)据我所知,ASP.NET会定期回收运行网站/网络应用程序的应用程序域(不确定我的所有术语是否正确)。在这些回收活动中进行会话吗?
(2)至少在我的开发服务器上,我对网站所做的某些更改(例如,添加新页面)似乎会导致活动会话在重新编译网站(或部分网站)时丢失。这种情况似乎不会随着每次变化而发生,但有很多变化。我特别关注这对于我的网站上线时可能发生的变化意味着什么。我想知道我可以更新的规则,而不会导致活动会话被杀死。
感谢您的任何指示。
答案 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一样。某些文件不会导致完全重启,但预测哪些文件并不容易,而且还取决于您正在使用的编译模式(批处理或不批处理)。如果您使用默认的每文件夹批处理编译模式,则应该能够在不强制重新启动的情况下更改子文件夹中的各个页面。但是,对主页面,代码或控件的更改可能会导致重新启动,因为可以更改顶级文件夹(取决于您在那里还有其他内容)。
我想我应该补充说,改变现场网站上的个别文件通常不是一个好主意 - 虽然我确信你有理由这样做。