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