【问题标题】:Content getting swapped for multiple sessions users in asp.net website在 asp.net 网站中为多个会话用户交换内容
【发布时间】:2013-09-07 20:28:50
【问题描述】:

我正在开发一个 asp.net 网站。

  • 当两个不同的用户使用不同的会话访问该网站时,一个用户的内容会被交换给另一个用户。
  • 我正在使用 javacsript,从 .aspx 页面和 C# 在代码后面调用 pagemethods。
  • 此问题主要发生在两个用户同时调用相同功能时。
  • 我认为静态变量可能会导致此问题,并尝试不使用任何静态变量或静态函数,但页面方法函数除外,其中页面方法必须是静态的。

请帮我解决这个问题。

【问题讨论】:

  • 你能发布一个代码示例吗?
  • 此站点是否位于负载均衡器后面?您的会话是存储在进程中还是在数据库中?
  • @Damon 这与特定的代码块无关。这个问题发生在使用静态变量的任何地方。我试图避免使用静态变量和静态方法,但对于 pagemethods,必须具有静态函数。如果你需要示例代码,我会提供。

标签: c# asp.net session-variables static-methods pagemethods


【解决方案1】:

我们遇到了类似的问题,发现是我们的负载均衡器(f5 Big-IP)弄乱了会话 ID。我们将负载均衡器更改为有状态的,现在它可以完美运行...

【讨论】:

    【解决方案2】:

    也可能与线程有关。 Lock这些变量,看看是否有帮助。

    静态方法不保证静态变量状态,即使方法保证是线程安全的。您必须管理该状态,并且 asp.net 将静态变量视为在所有用户之间共享。请参阅相关问题中的this answer

    更多阅读:Thread Synchronization

    【讨论】:

    • 锁定静态变量/静态函数是可以的,但是当n个用户访问相同的功能时,那么这种锁定可能会导致网站变慢,对吧?
    • 在大多数情况下,成本可以忽略不计,我很少遇到不得不回去优化的情况。但是当你开始关注线程同步时,它是一个全新的世界。很多复杂有趣的东西,比如SemaphoresMutexes
    • 对所有 cmets Hulk 感到抱歉,但 this question 确实是您想要阅读的内容,this one 回答了您关于速度的问题 - 但简短的答案是 50ns。
    【解决方案3】:
    • 在windows服务中开启aspnet状态服务。
    • 使用 session["x"] 代替静态 x
    • 将 viewstate["x"] 用于页面级别值

    【讨论】:

      【解决方案4】:

      检查您的会话状态配置(参见下面的示例)。 也许您使用了“InProc”以外的其他模式并且运行时遇到了一些问题。

      <sessionState mode="InProc" cookieless="false" timeout="60" />
      

      您还可以考虑使用缓存实例和使用 SessionID 作为前缀的键。 企业库提供了一个很好的缓存实现。

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        删除您用于响应您的请求的静态变量和静态方法。

        【讨论】:

          【解决方案6】:

          在 web.config 中添加sessionState

          <configuration>
            <system.web>
             <sessionState timeout="120" mode=" [InProc|StateServer|SQLServer|Custom]" cookieless="false"  />
            </system.web>
          </configuration>
          

          也可以尝试以下解决方案:

          1. 开始>管理工具>服务
          2. 右键单击 ASP.NET 状态服务并单击“开始”。

          变量也需要锁定,如@TombMedia's Answer 中所述。

          此链接可能对您有所帮助:Exploring Session in ASP.NET

          【讨论】:

            【解决方案7】:

            这是要在 Web.config 中设置的,而 这是要删除所有 .aspx 表单的..

            问候 卢比

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多