【问题标题】:ASP.NET Session Timeout TestingASP.NET 会话超时测试
【发布时间】:2010-09-16 03:13:16
【问题描述】:

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

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

【问题讨论】:

  • 当您说黑盒测试时,我认为这意味着您无法访问代码、配置文件或 IIS? :)
  • 不回答OP的问题,但相关:如果只需要测试超时正确与否时的行为,只需登录后重新启动服务器即可。旧会话将无效跨度>

标签: asp.net testing session timeout


【解决方案1】:

减少超时时间

对此进行测试的最简单和最非侵入性的方法可能是将超时时间减少到一个相当小的数字,例如 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 的请求将被简单地视为需要新会话的看不见的请求,这可能是您想要测试的,也可能不是。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        退回 AppPool 并且会话将丢失。

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

        【讨论】:

        • 你有更多关于记事本搞砸编码的信息吗?我使用记事本还没有遇到问题,这篇 MS 支持文章也描述了使用记事本编辑 web.config,“您可以使用记事本等文本编辑器创建 Web.config 文件。”:support.microsoft.com/kb/815179
        【解决方案5】:

        缩短超时时间。

        【讨论】:

        • 如果他们在整个代码中指定超时,这将不起作用,否则在 web.config 中设置超时将起作用
        • 代码应该从某种配置文件中获取值。
        【解决方案6】:

        您可以在 webconfig 中更改超时时间

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 这可能会起作用,因为 sessionID 存储在 cookie 中
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            你有两个选择:-

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

            【讨论】:

              【解决方案10】:

              我通常使用 ASP .NET 会话状态服务器。除了开发过程中的其他好处之外,我可以简单地重新启动 ASP .NET 状态服务来放弃会话。如果您使用的是状态服务器,只需运行 services.msc 并重新启动“ASP .NET 状态服务”。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-12-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-03
                • 2020-07-23
                相关资源
                最近更新 更多