2013-03-20 67 views
1

我關於用戶登錄的處理,同時將應用程序移植到MVC一個問題:在「老」的WebForm天ASP MVC與Web窗體:使用SessionState的用戶登錄

  • ,開發人員只需使用SessionState對象設置用戶登錄,例如,簡單地將userobject放入SessionState(並且此用戶對象擁有簡單的屬性,如名稱/ lastlogon等)。

  • 這個東西對我們很好用,我已經看到很多應用程序這樣做

  • 是的,我知道有這個MembershipProvide-啄,但我從來沒有使用過它現在

,在MVC中,每個人都告訴我,「使用SessionStat這是壞」和「應用程序建立了方式在設計上存在缺陷「,並且」存在大量的安全風險「等等。

我已經使用這種方法,因爲它爲應用程序工作非常可靠,它很容易實現,它涵蓋了我們需要的所有東西。

(當然,也有與回收利用網絡工作者過程中的事情並清空會話 - 但那不是我們的情況下一個問題,因爲該應用程序爲每個國家運行在專用機器上)

我讀過教程,告訴我把這些東西放在數據庫中 - 注意 - 向數據庫發出請求以檢查用戶是否已登錄,每EACH請求?但是:在任何情況下,這都是一種可行的方法,因爲我想將DB請求保持在最低限度。

所以我的問題是:

A),使用這種方式也是在新的MVC應用程序什麼錯?

B)最新的MVC應用程序處理這種情況最好的方法是什麼?

關於session-in-DB-idea:而不是這樣做,我會建議一個額外的服務,比如通過網絡獲取查詢的「會話管理器」,但是這樣的簡單請求不應該去數據庫 - 這不是一個好主意嗎?

任何想法,提示/等。非常感謝,因爲這個場景實在是困惑我:-X

+1

使用[籍](http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx)和表單/ Windows身份驗證的任何Web窗體或MVC應用程序。這是MS推薦的處理用戶和認證的官方方式。 – jrummell 2013-03-20 14:51:05

+0

用戶會得到一個額外的cookie,對吧?第二:它在哪裏以及如何存儲這些東西,以及如果我需要userobject在將來攜帶更多對象時它會做什麼? – johngrinder 2013-03-20 15:11:14

+0

關於會員制提供「有用」:在這個SO穿線MS-開發者自己的http://stackoverflow.com/questions/440568/why-should-i-use-asp-net-membership-security-model/一個說「包含的控件幾乎沒有好處」? – johngrinder 2013-03-20 15:34:49

回答

2

A)

的asp.net mvc框架的基本原則是,其無狀態。數據使用http請求傳遞併發送到viewmodels中的視圖。 Web窗體試圖維護視圖狀態等,這就是爲什麼你會看到會話方式登錄用戶。這不是說會話不應該完全在asp.net mvc中使用,有些情況下它可能會有用。就像維持一個三步表格過程一樣,這個過程必須在最後一步持續進行。但通常我們已經有一個推薦的方法來處理用戶登錄,並且那forms authentication

B)

對於訪問用戶對象,你可以創建一個custom identity實現IPrincipal接口並添加所需的用戶字段你需要。然後在global filter中設置自定義身份,並在您的操作結果中訪問它。關於不希望爲每個請求查詢數據庫,爲什麼不直接爲初始請求調用它,然後緩存結果,直到用戶更新,然後可以重新加載對象並再次將其設置爲自定義標識。

+0

要** A)** 用戶必須跨越標識的登錄會話 - 如果沒有,你可以不上網Facebook,或通過亞馬遜;他們需要在每個請求中「標識」一個用戶,他們需要知道當前的請求屬於哪個服務器會話 - 那麼,如果您提出無狀態參數,那麼他們的設計也存在缺陷? 爲了** B)** 所有這同一性/主要東西 - 它是如何存儲到用戶/帳戶的請求屬於?即使這個系統必須存儲在服務器內存/工作進程中的任何地方*或者我錯過了什麼?它如何處理「用戶登錄?」這個問題? – johngrinder 2013-03-20 19:42:15

+0

真的,目前我認爲我什麼都不懂,而應用程序已經在兩個國家生活。 :-(東西真的很讓我困惑 - 也許它不是一個執行問題但更多的是軟件的哲學問題...... – johngrinder 2013-03-20 19:43:10

+0

要跨登錄會話識別用戶,您可以設置使用FormsAuthentication.SetAuthCookie一個cookie,這將登錄用戶重定向後填充User.Identity.Name(用戶名)屬性。然後,您可以使用此值的cookie裏面來查詢您的數據庫請求之間和填充自定義的身份(你需要額外的用戶信息)。 – gdp 2013-03-21 10:01:10