【问题标题】:Create an scalable ASP.Net MVC web site without using Session [closed]在不使用 Session 的情况下创建可扩展的 ASP.Net MVC 网站 [关闭]
【发布时间】:2011-04-13 00:54:28
【问题描述】:

我正在使用 Asp.Net MVC 开发一个 Web 项目,我必须将其部署到农场环境。

我已经阅读了很多文章,并且正在考虑完全禁用 SessionState,我认为这将使应用程序更加健壮,并且会为我省去一些麻烦(我读过的所有内容都告诉我,处理农场上的会话并非微不足道)。

尽管如此,我对这种方法仍有一些不清楚的地方,主要是身份验证/授权过程。基本上,如果服务器上没有启用 SessionState,我不确定如何(如果?)处理用户会话。 如果用户登录网站然后尝试访问另一个页面,我怎么知道该用户已经登录? 我知道使用 cookie 是不安全的,我想到了将 cookie 与存储在数据库中的会话 ID 混合使用,但我想如果我禁用 SessionState,我也将无法访问会话 ID。

这方面最好的方法是什么?有没有推荐的书/文章你可以指点我,这样我就可以清楚地了解这一点?

非常感谢您的帮助

【问题讨论】:

  • 通过 SSL 使用 cookie 不一定不安全。许多流行的网站都是这样运作的

标签: asp.net asp.net-mvc session web-farm


【解决方案1】:

我认为为此使用表单身份验证,这将管理您的登录用户名,您也可以通过此设置授权。

http://msdn.microsoft.com/en-us/library/ff647070.aspx

http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

http://www.codeproject.com/KB/web-security/formsroleauth.aspx

http://www.beansoftware.com/ASP.NET-Tutorials/Forms-Authentication-Active-Directory.aspx

这些链接是您每个问题的答案。通过这个你可以管理角色授权和会话

【讨论】:

  • 非常感谢所有这些链接,他们肯定回答了我关于身份验证的大部分问题。
【解决方案2】:

如果有您的应用程序支持的工作流,您希望在应用程序回收(集群节点故障)时持续存在,您可能可以完全忽略持续会话的复杂性。

考虑一个电子商务结帐示例或类似的多步骤流程,在完成之前需要进行大量状态管理。建议将您的应用程序的model 设计为这样一种方式,即在这些“步骤”期间,worklow 的进度通过模型本地保存到数据存储中。也就是说,“工作流程”不是应用程序主模型的某种外部性,因此被视为需要一些持久性机制(如 aspnet Session)的“临时”事物,而不是应用程序的常规数据存储(数据库) .

例如,与其将结帐对象树(商品列表、订单等)存储在 Session 中,不如将其持久化到数据库本身。这样,“部分完成的结帐”不仅可以在节点故障或应用程序回收中幸存下来,而且如果该用户不得不去厨房扑灭紧急火灾或他们的 Windows 更新使他们的 PC 崩溃,他们可以在下次登录时恢复. :D 并且:您避免了所有复杂的分布式会话管理。呸!

我知道这个答案比问题实际突出的身份验证点更进一步,但很高兴知道这一点,而且肯定是集群/农场环境在 aspnet 应用程序上存在的问题。

Hanselman 谈集群 mvc 应用:http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx

【讨论】:

  • 感谢您的 cmets,实际上我的应用程序有几个场景需要存储部分“进程”,这绝对是我在设计时必须考虑的问题。我现在确定最好的方法是完全没有会话状态。谢谢
【解决方案3】:

FormsAuthentication 和 ASP.NET 用户配置文件在没有启用 SessionState 的情况下工作——默认情况下它们在 cookie 和数据库查找上运行。

对于购物车类型的场景,我强烈考虑将数据保存在数据库中并标记用户——它可以让人们回来拿走废弃的购物车。

在没有启用 SessionState 的情况下会中断的是 MVC 的 TempData——它将内容存储在页面之间的会话中。但是,如果您只是避免使用它,那么您就是黄金。

【讨论】:

  • 太好了,我不确定表单身份验证是如何工作的,现在我有了更清晰的想法。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多