不使用会话创建可扩展的ASP.NETMVC网站

不使用会话创建可扩展的ASP.NETMVC网站,asp.net,asp.net-mvc,session,web-farm,Asp.net,Asp.net Mvc,Session,Web Farm,我正在使用Asp.NETMVC进行一个Web项目,我必须将其部署到服务器场环境中 我读过很多文章,我正在考虑完全禁用SessionState,我认为这将使应用程序更加健壮,并将为我省去一些麻烦(我读过的所有内容都告诉我,在服务器场上处理会话并不是一件小事) 但是,对于这种方法,我仍然没有完全弄清楚一些事情,主要是身份验证/授权过程。基本上,如果服务器上没有启用SessionState,我不确定如何(如果?)处理用户会话。 如果用户登录到该网站,然后尝试访问另一个页面,我如何知道该用户已登录? 我

我正在使用Asp.NETMVC进行一个Web项目,我必须将其部署到服务器场环境中

我读过很多文章,我正在考虑完全禁用SessionState,我认为这将使应用程序更加健壮,并将为我省去一些麻烦(我读过的所有内容都告诉我,在服务器场上处理会话并不是一件小事)

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

最好的方法是什么?有什么推荐书/文章可以让我看清楚吗


非常感谢您的帮助

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


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

如果您的应用程序支持一些工作流,并且希望在应用程序回收(群集节点故障)期间保持这些工作流,则您可以完全忽略持久会话的复杂性

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

例如,与其在会话中存储签出对象树(项目列表、订单等),不如将其保存到数据库本身。通过这种方式,“部分完成的签出”不仅可以避免节点故障或应用程序回收,而且,如果该用户必须去厨房扑灭紧急火灾或其Windows Update使其PC崩溃,他们可以在下次登录时继续:D 而且:您可以避免所有复杂的分布式会话管理。哎呀

我知道这个答案不仅仅是问题所强调的身份验证点,但这是一个好消息,而且肯定是aspnet应用程序上的集群/服务器场环境的一个问题


群集mvc应用程序上的Hanselman:

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

对于购物车类型的场景,我强烈考虑只保存数据库中的数据并标记用户——它可以让人们回来并抓取丢弃的车。
如果不启用SessionState,MVC的TempData会崩溃,它会在页面之间的会话中隐藏内容。但是,如果您只是避免使用它,那么您就是黄金。

通过SSL使用cookies并不一定是不安全的。很多流行的网站都是以这种方式运作的。很好,我不确定表单身份验证是如何工作的,现在我有了更清晰的想法。谢谢。谢谢你的评论,实际上我的应用程序有几个场景需要存储部分“进程”,这是我在设计这个应用程序时必须考虑的。我现在确信最好的方法是完全不使用会话状态。非常感谢所有这些链接,它们肯定回答了我关于身份验证的大部分问题。