我正在对ASP.Net网站进行一些黑盒测试,我需要测试不同的会话超时场景。
我不确定它们是否完全封装了会话超时。除了让页面打开20分钟之外,还有什么更简单的方法可以强制会话超时吗?
减少超时
测试这一点最简单、最无干扰的方法可能是将超时时间减少到一个相当小的数字,例如3或5分钟。这样,您可以暂停几分钟以模拟更长的暂停时间,而不用担心应用程序重新启动或特殊重置代码会对测试结果产生任何影响。
您可以在几个位置修改会话状态超时-全局(在适用.NET framework版本的config文件夹中的web.config中),也可以仅针对您的应用程序。
要仅修改应用程序的超时,可以将以下内容添加到应用程序的web.config中:
<system.web>
<sessionState timeout="60" />
...
或者,您也可以通过IIS配置对话框修改应用程序的相同设置(不过,我认为您仍然需要为应用程序定义web.config,否则将禁用"编辑配置")。
若要访问它,请右键单击IIS中的web应用程序,然后导航到"属性"|"ASP.NET"选项卡|"编辑配置"|"状态管理"选项卡|会话超时(分钟)。
请注意,您也可以通过代码操作此设置-如果已经在执行此操作,那么web.config文件中的设置将被有效地忽略,您将需要使用另一种技术。
呼叫会话.放弃()
与设置低超时相比,一种更具侵入性的技术是调用Session.Advant()。不过,请确保从与应用程序分离的页面中调用它,因为在处理完当前页面上的所有脚本命令之前,会话实际上不会结束。
我的理解是,这将是一种相当干净的方法来测试会话超时,而无需实际等待。
强制应用程序重新启动
在会话状态的默认配置中,您可以通过使应用程序重新启动来完全中断会话,从而模拟会话超时。这可以通过几种方法来实现,其中一些方法如下所示:
- 通过回收应用程序池
- IIS MMC管理单元
- 命令行(iisapp/aAppPoolID/r)
- 修改bin目录中的web.config、global.asax或dll
- 通过重新启动IIS
- IIS MMC管理单元
- services.msc并重新启动IIS管理服务
- 命令行(iisreset)
当我提到"默认配置"时,我指的是配置为使用"InProc"会话状态模式的web应用程序。即使重新启动web应用程序,也有其他模式可以实际维护会话状态(StateServer、SQLServer、Custom)。
篡改状态跟踪机制
假设您的web应用程序没有配置为"无cookie"模式(默认情况下,将使用cookie),您可以从客户端浏览器中删除包含会话ID的cookie。
然而,我的理解是,这并不是真的模拟超时,因为服务器仍然会知道会话,只是看不到任何人在使用它。没有会话ID的请求将被视为需要新会话的看不见的请求,这可能是你想要测试的,也可能不是你想要测试。
向站点添加一个页面并调用Session。放弃()
跳出AppPool,会话将丢失。
如果你没有直接的IIS访问权限,你可以打开并保存Web.Config来做同样的事情(不要使用记事本,它会破坏编码)。
缩短超时时间。
您可以在webconfig 中更改超时
<authentication mode="Forms">
<forms timeout="10" protection="All" slidingExpiration="true" loginUrl="~/login.aspx" cookieless="UseCookies"/>
</authentication>
如果您将会话信息存储在cookie中,您可以尝试删除cookie。
回收服务器上的应用程序池。
您有两个选项:-
1-减少web.config中的会话超时。2-重新启动IIS或应用程序池。
我通常使用ASP.NET会话状态服务器。除了开发过程中的其他好处外,我可以简单地重新启动ASP.NET状态服务来放弃会话。如果您使用的是状态服务器,只需运行services.msc并重新启动"ASP.NET状态服务"。