2010-09-16 68 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

相關問題