在asp.net网站中为多个会话用户交换内容
本文关键字:用户 会话 交换 net asp 网站 | 更新日期: 2023-09-27 18:30:11
我正在开发一个asp.net网站。
- 当两个不同的用户使用不同的会话访问该网站时,一个用户的内容会被交换给另一个用户
- 我使用的是javacscript,从.aspx页面和C#代码后面调用pagemethods
- 这个问题主要发生在两个用户同时调用相同的功能时
- 我认为静态变量可能会导致这个问题,并尝试不使用任何静态变量或静态函数,除了pagemethod函数,因为pagemethod是静态的
请帮我解决这个问题。
也可能与线程有关。锁定这些变量,看看这是否有帮助。
静态方法不能保证静态变量状态,即使这些方法被保证是线程安全的。您必须管理该状态,而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>
还可以尝试以下解决方案:
- 开始>管理工具>服务
- 右键单击ASP.NET State Service,然后单击"启动"
变量也需要锁定,如@TombMedia的回答中所述。
此链接可能有助于您:探索ASP.NET 中的会话
这将在Web.config和<%@中设置outputcache duration="1"varybyparam="none"%>这将删除所有.aspx表单。。
问候Rs