在asp.net网站中为多个会话用户交换内容

本文关键字:用户 会话 交换 net asp 网站 | 更新日期: 2023-09-27 18:30:11

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

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

请帮我解决这个问题。

在asp.net网站中为多个会话用户交换内容

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

静态方法不能保证静态变量状态,即使这些方法被保证是线程安全的。您必须管理该状态,而asp.net将静态变量视为所有用户共享的变量。请参阅相关问题的答案。

更多阅读:线程同步

我们也遇到了类似的问题,发现是我们的负载均衡器(f5-Big IP)把会话ID搞砸了。我们将负载均衡器更改为有状态的,现在它的功能非常完美。。。

  • 打开windows服务中的aspnet状态服务
  • 使用会话["x"]而不是静态x
  • 对页面级别的值使用viewstate["x"]

检查会话状态配置(请参阅下面的示例)。也许您使用了"InProc"之外的另一种模式,并且在运行时遇到了一些问题。

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

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

希望这能有所帮助。

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

在web.config:中添加sessionState

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

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

  1. 开始>管理工具>服务
  2. 右键单击ASP.NET State Service,然后单击"启动"

变量也需要锁定,如@TombMedia的回答中所述。

此链接可能有助于您:探索ASP.NET 中的会话

这将在Web.config和<%@中设置outputcache duration="1"varybyparam="none"%>这将删除所有.aspx表单。。

问候Rs