asp.net-mvc - 在 Asp.Net MVC 网站中维护状态

标签 asp.net-mvc asp.net-mvc-4

我目前正在设计一个基于 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/

相关文章:

javascript - 如何在MVC4 Jquery Ajax请求中运行 "success"函数?

javascript - ASP.net MVC/Knockout JS 映射 - 无法更新 ViewModel

jquery - asp.net mvc 4 使用ajax表单助手上传文件

c# - 如何编写 Nhibernate 查询

jquery - 如何使用苹果浏览器在 Web Asp.net MVC 应用程序中打开文件对话框库?

jquery - 返回 JSON 数据以查看 ASP.NET MVC 页面

c# - ASP.NET MVC 4 - 在主页上登录

c# - SQL 数据库中的 Controller 异步/等待死锁

asp.net-mvc - 处理用户重新提交删除操作的正确方法?

asp.net-mvc - 如何将枚举值映射到查找表 - Code First