我有一个 asp.net Web 应用程序,它使用状态服务器来存储其会话。当我们更改存储在会话中的某些内容的类型时,所有具有活动会话的用户都会出错,因为“旧会话”包含“旧类型”的实例。
我认为解决这个问题的最简单方法是重新启动状态服务器,从而摆脱所有会话。然而,这被证明是一种幼稚的做法。会话似乎仍然处于活动状态(具有会话旧 cookie 的用户仍然能够工作)。是否有其他方法可以强制会话状态服务器丢弃所有会话,以便为旧用户分配新会话?如果他们被迫再次进行身份验证也没关系。
或者是否有其他(更好)的方法来放弃所有会话?理想情况下不是以编程方式,但我们的管理员可以做什么?
编程方法可能会调用Session.RemoveAll
in Application_End
可以解决问题,但是这是标准方法吗?
如果会话不在内存中(在重新启动时应该不再存在),那么会话存储在状态服务器中的哪里?
我发现了两个相关的问题:
在应用程序启动时清除所有会话 https://stackoverflow.com/questions/11417587/clear-all-sessions-on-application-start- 这是相当不完整的编程解决方案
如何清除 ASP.NET 中所有用户的 SQL 会话状态 https://stackoverflow.com/questions/1321435/how-to-clear-sql-session-state-for-all-users-in-asp-net- 如果我有一个 sql server 方法来存储会话数据,这正是我所需要的
好吧,看起来是这样的(经过一些实验),会话状态服务器的重新启动会丢弃会话中的所有数据。
不过,重新启动后用户的会话 ID 仍然有效,这让我最初认为会话没有被丢弃。
我猜想,如果用户发送的会话 id 没有分配给某个现有会话,那么它会被新会话重用,因此用户仍然使用相同的 id 进行操作。尽管如此,会话中的数据还是被清除了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)