减少超时时间
对此进行测试的最简单和最非侵入性的方法可能是将超时时间减少到一个相当小的数字,例如 3 或 5 分钟。这样,您可以暂停几分钟以模拟更长的暂停,而不必担心应用程序重新启动或特殊的重置代码会对您的测试结果产生任何影响。
您可以在几个位置修改会话状态超时 - 全局(在适用的 .NET 框架版本的 config 文件夹中的 web.config 中),或仅针对您的应用程序。
要仅为您的应用程序修改超时,您可以将以下内容添加到您的应用程序的 web.config:
<system.web>
<sessionState timeout="60" />
...
或者,您也可以通过 IIS 配置对话框为您的应用程序修改相同的设置(我相信您仍然需要为您的应用程序定义一个 web.config,否则编辑配置将被禁用)。
要访问它,请在 IIS 中右键单击您的 Web 应用程序,然后导航到 Properties | ASP.NET 选项卡 |编辑配置 |状态管理选项卡 |会话超时(分钟)。
请注意,您也可以通过代码操作此设置 - 如果已完成此操作,则 web.config 文件中的设置将被有效地忽略,您将需要使用另一种技术。
调用 Session.Abandon()
调用 Session.Abandon() 比设置低超时更具有侵入性。不过,请务必从与您的应用程序分开的页面调用它,因为在处理当前页面上的所有脚本命令之前,会话实际上并没有结束。
我的理解是,这将是一种相当干净的方式来测试会话超时,而无需实际等待它们。
强制重启应用
在会话状态的默认配置中,您可以通过重新启动应用程序来完全消除会话来模拟会话超时。这可以通过多种方式完成,下面列出了其中的一些:
- 通过回收应用程序池
- IIS MMC 管理单元
- 命令行 (iisapp /a AppPoolID /r)
- 修改 web.config、global.asax 或 bin 目录中的 dll
- 通过重启 IIS
- IIS MMC 管理单元
- services.msc 并重新启动 IIS Admin 服务
- 命令行 (iisreset)
当我提到“默认配置”时,我指的是配置为使用“InProc”会话状态模式的 Web 应用程序。即使重新启动 Web 应用程序,也有其他模式可以实际保持会话状态(StateServer、SQLServer、自定义)。
篡改状态跟踪机制
假设您的 Web 应用程序未配置“无 cookie”模式(默认情况下,将使用 cookie),您可以从客户端浏览器中删除包含会话 ID 的 cookie。
但是,我的理解是,这并不是真正模拟超时,因为服务器仍然会知道会话,只是看不到有人在使用它。没有会话 ID 的请求将被简单地视为需要新会话的看不见的请求,这可能是您想要测试的,也可能不是。