2010-09-16 66 views
5

我正在使用Asp.Net MVC处理Web项目,我必须将其部署到服务器场环境。在不使用会话的情况下创建可伸缩的ASP.Net MVC网站

我已经阅读了很多文章,并且正在考虑完全禁用SessionState,我认为这会使一个更强大的应用程序,并将节省我一些头痛(我读过的所有内容都告诉我:在农场处理会话并不重要)。

有一些事情,我还没有这种做法完全清楚不过,主要的一个是认证/授权过程。基本上我不知道如果服务器上没有启用SessionState,我可以如何处理用户会话。 如果用户登录到网站,然后尝试访问另一个页面,我怎么知道用户已经登录? 我知道使用cookie是不安全的,我想到了存储在数据库中的会话Id的Cookie混合,但我想如果我禁用SessionState,我将无法访问会话ID。

这是什么最好的方法?是否有任何建议的书籍/文章可以指向我,以便我可以清楚地了解这些内容?

非常感谢您的帮助

+3

通过SSL使用Cookie不一定是不安全的。很多流行的网站都以这种方式运作 – sipwiz 2010-09-16 05:19:05

回答

6

我觉得这个使用Forms身份验证,这将是管理你的登录用户名,你也可以通过这样设置授权。

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

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

+0

非常感谢所有这些链接,他们绝对回答了我关于认证的大部分问题。 – willvv 2010-09-16 23:35:28

3

它可能会,如果有工作流应用程序支持要坚持在申请回收(群集节点失效),您可能能够完全忽略持续会话的复杂性。

考虑一个电子商务结帐示例或类似的多步过程,需要完成前一个批次状态管理。建议设计应用程序的model是这样一种方式,即在这些“步骤”中,工作流程的进度通过模型本地保存到数据存储区。也就是说,“workfolow”对于你的应用程序的主要模型并不是某种外部性,因此被看作是需要像aspnet Session这样的持久性机制而不是应用程序常规数据存储(数据库)的“临时” 。

例如,而不是存储结账对象树在会话(项,订单等的列表),其保存到数据库中。这种方式不仅可以避免节点故障或应用程序回收,而且还可以避免节点故障或应用程序回收。但是,如果用户不得不在厨房内发出紧急火警,或者他们的Windows Update使他们的PC崩溃,他们可以在他们登录时继续。 :D 而且:您避免了所有复杂的分布式会话管理。育!

我知道这个答案延伸到比刚才说的问题实际上凸显该验证点进一步,但这是很好的了解,当然在ASPNET应用问题集群/场环境的地方。

Hanselman在集群上的应用程序的MVC:http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx

+0

感谢您的意见,实际上我的应用程序有几个方案需要存储部分“流程”,这在设计时肯定会考虑到。我现在确定最好的方法是根本没有Session状态。谢谢 – willvv 2010-09-16 23:34:42

2

FormsAuthentication并没有SessionState的ASP.NET用户配置文件启用工作 - 他们的饼干和数据库查找默认运行。

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

什么可以和将打破没有启用SessionState是MVC的TempData - 它存储页面之间的会话中的东西。但是,如果你只是避免使用它,你是金。

+0

太好了,我不确定Forms身份验证是如何工作的,现在我有了一个更清晰的想法。谢谢。 – willvv 2010-09-16 23:32:12

相关问题