ASP.NET会话超时测试

时间:2008-10-08 20:39:59

标签: asp.net testing session timeout

我正在对ASP.Net网站进行一些黑盒测试,我需要测试不同的会话超时情况。

我不确定他们是否完全封装了会话超时。除了让页面打开20分钟之外的其他方法是否有更简单的方法来强制会话超时?

10 个答案:

答案 0 :(得分:71)

减少超时

最简单,最具侵入性的测试方法可能是将超时时间减少到相当小的数量,例如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)
    • 修改bin目录中的web.config,global.asax或dll
  • 重启IIS
    • IIS MMC管理单元
    • services.msc并重新启动IIS Admin服务
    • 命令行(iisreset)

当我提到“默认配置”时,我指的是配置为使用“InProc”会话状态模式的Web应用程序。即使重新启动Web应用程序(StateServer,SQLServer,Custom),还有其他模式可以实际维护会话状态。

篡改状态跟踪机制

假设您的Web应用程序未配置“无cookie”模式(默认情况下将使用cookie),您可以从客户端浏览器中删除包含会话ID的cookie。

但是,我的理解是,这并不是真正模拟超时,因为服务器仍然会知道会话,它只是不会看到任何人使用它。没有会话ID的请求将被视为需要新会话的看不见的请求,这可能是您想要测试的,也可能不是。

答案 1 :(得分:9)

向网站添加页面并调用Session.Abandon()

答案 2 :(得分:5)

最简单的方法是在两个不同的选项卡中打开页面,在其他选项卡中注销会在第一个选项卡中自动使会话过期。 大多数浏览器在选项卡上共享会话。所以我发现在没有修改web.config中的任何内容的情况下很容易。 这样,即使特定功能在会话到期时没有处理重定向到登录,也可以进行测试。

答案 3 :(得分:4)

缩短暂停时间。

答案 4 :(得分:4)

退回AppPool,会话将丢失。

如果你没有直接的IIS访问权限,你可以打开并保存Web.Config来做同样的事情(不要使用记事本,它会搞砸编码)。

答案 5 :(得分:3)

您可以更改webconfig中的超时

 <authentication mode="Forms">
      <forms timeout="10" protection="All" slidingExpiration="true" loginUrl="~/login.aspx" cookieless="UseCookies"/>
 </authentication>

答案 6 :(得分:2)

如果您将会话信息存储在cookie中,可以尝试删除cookie。

答案 7 :(得分:1)

在服务器上回收应用程序池。

答案 8 :(得分:0)

您有两种选择: -

1-减少web.config中的会话超时。 2-重新启动IIS或应用程序池。

答案 9 :(得分:0)

我通常使用ASP .NET会话状态服务器。除了开发过程中的其他好处,我可以简单地重新启动ASP .NET状态服务以放弃会话。如果您正在使用状态服务器,只需运行services.msc并重新启动&#34; ASP .NET State Service&#34;。