2014-12-02 30 views
4

我對MVC4中的會話管理有點困惑。Session實際上是如何在MVC中工作的?

可以說,我輸入了用戶名和密碼並單擊登錄按鈕。 然後在服務器端,我從HttpContext.Current.Session獲得SessionId。然後我正在驗證該數據庫的用戶憑據。如果用戶有效,則在Session中添加SessionId,userName和uiserId。

可以這樣說,下次請求來自同一臺機器和同一瀏覽器時,我得到了相同的SessionId,然後允許該用戶訪問其他信息。

現在我以下的問題:

  1. 如何服務器來知道請求是來自同一個瀏覽器,並從同一臺機器來的?
  2. 我發現SessionId對於不同的瀏覽器是不同的,但是對於同一臺瀏覽器在不同的機器上是一樣的,所以如果我從machine1和google chrome登錄,那麼是否有可能爲不同的瀏覽器使用相同的會話?會話將可用於具有相同瀏覽器的不同機器。是否有可能?)
  3. 服務器如何理解請求是針對登錄的同一用戶?
  4. 在asp.net會話由viewState維護,但視圖狀態不在MVC中使用,那麼MVC中使用了什麼?
+0

我會嘗試回答你的具體問題,當我找到更多的時間,但我認爲這個網址將幫助你清除一些疑惑。 https://gregorybeamer.wordpress.com/2012/11/04/session-and-cookies-in-asp-net-mvc-oh-my/ – SBirthare 2014-12-02 08:29:27

+0

好的,謝謝,我將通過這個URL – Ashok 2014-12-02 08:43:32

+0

會議永遠不會「維護「通過ViewState,它們完全是分離的機制。 ViewState存儲在頁面的隱藏字段中,會話數據永遠不會發送到瀏覽器。 – 2014-12-02 09:49:45

回答

4

首先,我建議閱讀有關HTTP會話的this Wikipedia article。對你的問題的答案:

  1. 每個請求的客戶端在任何一個cookie 或查詢字符串發送其SessionId
  2. 這應該是不可能的默認情況下。但可以通過session hijacking完成。
  3. 服務器讀取由問題1中的客戶端發送的SessionId。服務器維護例如鍵值數據對象,以便它可以爲給定的SessionId加載正確的數據。
  4. ASP MVC不使用視圖狀態,因爲它與ASP.NET完全不同。有關更多信息,請參閱this question
+0

感謝您的回覆。我明白你想說什麼。請檢查以下評論 - 所以這意味着我不需要做任何額外的維護用戶會話。我將在HttpContext會話中添加userName及其sessionId。服務器將採取cookie值,並將獲得其相關的會話和用戶名和用戶信息。這樣對嗎? 此外,我們得到相同的sessionId來自不同的機器相同的瀏覽器。但是你只是說會話劫持只是發生了這種情況。 那麼這是怎麼發生的? – Ashok 2014-12-02 12:43:50

+1

是的,除非你改變配置中的東西,否則ASP MVC會處理開箱即用的會話。如果要驗證用戶身份,請查看窗體身份驗證:http://msdn.microsoft.com/en-us/library/ff398049(v=vs.98)。aspx同樣的'SessionId'究竟是什麼意思?這意味着兩臺機器上的cookie中的值是相同的。你可以通過在機器1的會話中放入一些東西來驗證應用程序中的這種行爲,並在機器2上讀取它? – Marthijn 2014-12-02 13:00:33

+0

感謝您的回覆。 好的,我會做到這一點。 SessionId表示從瀏覽器收到的sessionId – Ashok 2014-12-02 13:20:22

相關問題