我已经阅读了有关存储会话状态的信息out-of-process
,但仍通过将 Web 应用程序配置为使用提供程序来存储在内存中,例如StateServer
我有一个List<int>
包含accountIDs
我想在 webfarm 中的所有服务器之间共享的内容。该列表不是与任何特定帐户相关的会话数据,它是我希望在内存中(但可能是进程外)的全局列表,以便场中的每个服务器可以检查每个请求以查看是否它包含一个accountID
.
能否以与共享会话状态相同的方式共享此数据?请问你能详细说明应该如何做吗?
这是一个好的解决方案吗?尝试访问同一个列表的许多服务器是否会对性能造成影响?
编辑:额外进入...
在我的应用程序中,用户帐户有一个_accountStatus,如果设置为暂停,应用程序将使用它来限制用户可以执行的操作。_accountStatus保留在定制的身份验证票证中。问题是用户可以保持登录状态,他们可以在今天登录,一个月后离开并回来仍然登录。同时,站点管理员可能已经暂停了他们的帐户,但是因为_accountStatus 保留在身份验证票证中现在不正确,用户仍然可以访问他们不应该的访问权限。
因此,当管理员更改用户的_accountStatus时,他们的_accountID将添加到the list
. 然后在每个请求中检查列表。如果帐户在列表中,那么它必须从数据库中重新加载它的_accountStatus(它始终具有正确的值)并更新身份验证票证。
所以是的,也许将列表保留在 SQL Server 中是最好的解决方案。
另一种解决方案可能是将_accountStatus不存储在身份验证票证中,而是存储在会话中。当一个新会话开始时,它可以被加载。但是现在有一个问题,如果管理员决定在用户会话期间暂停帐户怎么办。应用程序如何访问该用户的会话并从外部更新_accountStatusHttpApplication
?或者在用户的请求之间,如果你明白我的意思吗?