2017-01-13 107 views
-2

我很新的MVC,最近我想從一個空的MVC模板創建一個登錄表單。我聽說過身份類和會話。這兩個有什麼區別?應該同時使用它們還是這些不同類型的東西?在ASP.NET MVC中的會話

+1

你想使用令牌而不是會話。會議非常過時。看一看OAuth –

+0

@SimonPrice:什麼?沒有任何意義。 '會話'並沒有過時。我不知道這裏的「令牌」是什麼,會話是一個沒有替代或替代的概念。 HTTP是無狀態的。你用會話僞造狀態。就那麼簡單。 –

回答

2

這個相對簡單的問題有很多。首先,我認爲你需要了解會議是什麼。

HTTP協議是無狀態的。這意味着每個請求都是它自己的東西,不受之前發生的任何事情的影響。但是,應用程序需要狀態,所以引入了會話的概念。會話是兩個組件的組合,一個是服務器端,另一個是客戶端。在傳統意義上,服務器將存儲一些與會話ID相結合的數據。然後它會發送一個cookie到包含該會話ID的客戶端。客戶端將cookie發回到下一個請求。當服務器看到cookie時,它使用它包含的會話標識來查找它先前存儲的數據。

當談到類似身份驗證的情況時,需要狀態來在請求之間持續進行身份驗證。在像MVC網站這樣的東西中,會話被用於這個目的。在客戶端設置一個cookie,然後由客戶端發送每個請求。服務器讀取cookie,驗證身份驗證並授權用戶。在像Web Api這樣的東西中,會話是不允許的,所以客戶端必須通過每個請求來傳遞身份驗證,通常採用Authorization標題的形式,其中將包含類似不記名令牌的內容。然而,普通用戶通過Web瀏覽器加載的任何傳統網站都將通過會話持續進行認證。

現在,在ASP.NET代碼中,有一個名爲Session的靜態動態字典。這利用會話的概念在Web請求之間保持狀態,但不被任何ASP.NET站點可用的身份驗證機制使用。不鼓勵使用Session,因爲通常將數據存儲在數據庫等更好的地方會更合適。有一些地方使用Session會很好,但你應該有一個很好的理由這樣做。但是,再次,這與認證/授權沒有任何關係。

最後,ASP.NET網站有許多不同的身份驗證系統可用,有些已棄用。就傳統的用戶身份驗證而言,您擁有ASP.NET Membership和Identity。身份更新且優於ASP.NET Membership(也稱爲FormsAuthentication)。但是,它僅適用於使用MVC 5或Core的網站。

總而言之,如果您今天要創建一個需要身份驗證的新網站,則需要查看ASP.NET身份。有大量的examples and tutorials from Microsoft。您可能需要也可能不需要在應用程序中使用Session,但應儘可能避免使用它。無論如何,它與認證/授權完全分離,即使在引擎蓋下,它們都使用類似的原則。