我不确定他们是否完全封装会话超时。其他然后离开一个页面打开20分钟是有一个更容易的方式强制会话超时?
解决方法
测试这个的最简单和最非侵入的方法可能是将超时减少到一个相当小的数,如3或5分钟。这样,您可以暂停几分钟以模拟更长的暂停,而不必担心应用程序重新启动或特殊的重置代码对测试结果有任何影响。
您可以在几个位置(在适用的.NET框架版本的config文件夹中的web.config中)或仅针对应用程序修改会话状态超时。
要仅为应用程序修改超时,可以将以下内容添加到应用程序的web.config中:
<system.web> <sessionState timeout="60" /> ...
或者,您也可以通过IIS配置对话框(我认为您仍然需要为您的应用程序定义一个web.config,否则编辑配置将被禁用)修改此应用程序的相同设置。
要访问它,在IIS中右键单击您的Web应用程序,然后导航到属性| 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管理服务
>命令行(iisreset)
当我提到“默认配置”,我的意思是配置为使用“InProc”会话状态模式的Web应用程序。还有其他模式可以实际维护会话状态,即使Web应用程序重新启动(StateServer,sqlServer,Custom)。
篡改与状态跟踪机制
假设您的网络应用程序未配置“无Cookie”模式(默认情况下将使用Cookie),您可以从客户端浏览器中删除包含会话ID的Cookie。
但是,我的理解是,这不是真的模拟一个超时,因为服务器仍然会知道会话,它只是不会看到任何人使用它。没有会话ID的请求将被简单地视为需要新会话的未见请求,这可能是也可能不是您想要测试的。