我目前正在设计一个基于 MVC 的新网站,我想知道管理状态的正确方法是什么。
状态应该包含 userId 和用户信息的一些结构,并且应该在用户登录时的整个 session 期间保留(通过 http 请求)
重要标准:
1) 支持可扩展性
2)性能
最简单的方法是使用Session对象,但它不支持可扩展性。如果 session 期间不同的请求经过不同的 IIS 服务器,则 session 将不会被保留。尽管我听说过负载平衡工具可以通过同一台计算机路由单个 session 的所有请求,但我不确定依赖它是否是一个好的做法(不是吗?)
我读到的另一个选项是将状态数据保存在运行 RAM DB 的特殊状态服务器中(例如用于 Linux 的 Cassandra 或用于 Windows 的 Redis)。但在我看来,在现阶段的开发中,这似乎有些过分了。
您还有其他建议吗? 我现在想从一些简单的事情开始,但要为 future 更高级的解决方案做好设计准备。
任何最佳实践或代码/设计建议将不胜感激。
谢谢,
编辑。
最佳答案
(1) 使用Sql Server存储 session 状态
(2) 使用 Memcached as a Session State Provider
(3) 在外部缓存提供程序上使用缓存来制定您自己的解决方案:考虑使用类似 ServiceStack Caching Framework 的内容。使用此功能,您可以使用 Redis、Memcached、Azure 或 AWS 来处理缓存。
接下来,创建一个 KeyFactory 来处理特定项目的 key 生成。项目键将包含 UserId(您始终可以从 FormsAuthentication
UserId 获得该 UserId(假设您正在使用 FormsAuthentication
)。然后将用户的所有 session 数据存储在缓存中.使用这种方法,您可以使用缓存代替Session
,并且缓存可以在多个服务器之间共享。
注意:您可以采用不同的方法来在用户开始新 session 时清除用户的数据。潜在的方法包括:
- 在cacheKey中包含用户的 session 开始日期时间,并在条目不再新鲜时自动过期
- 在用户开始新 session 时清除用户的所有潜在条目
关于asp.net-mvc - 在 Asp.Net MVC 网站中维护状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14820509/