我正在对 ASP.Net 网站进行一些黑盒测试,我需要测试不同的会话超时场景。
我不确定他们是否完全封装了会话超时。除了将页面打开 20 分钟之外,还有没有更简单的方法来强制会话超时?
减少超时
测试这一点的最简单和最非侵入性的方法可能是将超时减少到一个相当小的数字,例如 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()。不过,请务必从与您的应用程序分开的页面调用它,因为在处理当前页面上的所有脚本命令之前,会话实际上并没有结束。
我的理解是,这将是一种相当干净的方式来测试会话超时,而无需实际等待它们。
强制重新启动应用程序
在会话状态的默认配置中,您可以通过重新启动应用程序来完全消除会话来模拟会话超时。这可以通过多种方式完成,下面列出了其中的一些:
当我提到“默认配置”时,我指的是配置为使用“InProc”会话状态模式的 Web 应用程序。即使重新启动 Web 应用程序,也有其他模式可以实际保持会话状态(StateServer、SQLServer、自定义)。
篡改状态跟踪机制
假设您的 Web 应用程序未配置“无 cookie”模式(默认情况下,将使用 cookie),您可以从客户端浏览器中删除包含会话 ID 的 cookie。
但是,我的理解是,这并不是真正模拟超时,因为服务器仍然会知道会话,只是看不到任何人在使用它。没有会话 ID 的请求将被简单地视为需要新会话的看不见的请求,这可能是您想要测试的,也可能不是。
向站点添加页面并调用 Session.Abandon()
最简单的方法是在两个不同的选项卡中打开页面,在其他选项卡中注销将自动使第一个选项卡中的会话过期。大多数浏览器跨选项卡共享会话。所以我发现它很容易,无需修改 web.config 中的任何内容。这样,即使会话到期时特定功能未处理重定向到登录,您也可以进行测试。
反弹 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 或应用程序池。
I usually use the ASP .NET session state server. Apart from other benefits during development, I can simply restart the ASP .NET state service to abandon the session. If you're using the state server, simply run services.msc and restart the "ASP .NET State Service".