例如:如果我正在檢索User.Identity.Name,它是來自.ASPXAUTH cookie還是使用我的成員資格提供程序從數據庫中檢索?User.Identity數據來自哪裏?
當我訪問User.Identity時是否有任何數據庫請求?
謝謝。
編輯:現在我敢肯定它來自一個身份驗證票證的cookie,但找不到任何官方文件證實了這一點。任何人?
例如:如果我正在檢索User.Identity.Name,它是來自.ASPXAUTH cookie還是使用我的成員資格提供程序從數據庫中檢索?User.Identity數據來自哪裏?
當我訪問User.Identity時是否有任何數據庫請求?
謝謝。
編輯:現在我敢肯定它來自一個身份驗證票證的cookie,但找不到任何官方文件證實了這一點。任何人?
這應該回答你的問題......
「窗體身份驗證票證不僅包括用戶的身份,同時也包含信息以幫助確保完整性和安全性令牌「。
http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-vb
除了這種解釋,觀察ASP.NET行爲還支持用戶名,實際上,存儲在ASPXAUTH餅乾的結論:從下面的Microsoft文章摘錄ASP.NET不在用戶通過身份驗證後,在隨後的頁面請求中擊中數據庫。就像我一樣,您可以自己證明這一點,通過運行SQL事件探查器來監視數據庫,因爲它是由ASP.NET應用程序使用的。
也知道用戶名和認證票據數據不存儲在會話狀態。除了引發安全問題之外,當會話狀態被禁用時,這種實現會導致ASP.NET成員資格中斷。這裏是另一個堆棧溢出的答案表明窗體身份驗證(會員)數據和會話狀態無關彼此:
Does FormsAuthentication.SetAuthCookie() make a session based cookie?
這個問題的答案還鏈接到一個MSDN文章,here,這解釋了ASPXAUTH餅乾詳細地說,雖然我上面引用的文章似乎更加流行。
.ASPXAUTH cookie/User.Identity來自身份驗證(Windows,Forms)。
如果你正在試圖獲得會員用戶需要使用
Membership.GetUser()
或
Membership.GetUser(User.Identity.Name)
documentation here這將導致一個DB調用。
我相信認證信息是特定於會話並維護在ASP.net進程或外部甚至SQL服務器。一旦用戶通過身份驗證,將生成一個會話令牌,該令牌用於跟蹤狀態服務中經過身份驗證的用戶的信息。在隨後的請求中,會話令牌用於檢索用戶身份,並在那裏獲取預先填充的對象(如User.Identity.Name)。這必須在Forms Authentication模塊或Windows身份驗證模塊中使用,具體取決於使用的身份驗證類型。如果您設置爲無cookie身份驗證模式,會話令牌將顯示在URL中。一旦會話過期,與會話有關的所有信息將從狀態服務中刪除。
希望這個清楚!
這取決於您使用的會話類型。可以通過使用兩個參數來改變會話 1.使用Cookies-Cookieless或使用Cookie 2.存儲會話狀態信息-Inproc(進程中),outproc(ASP.net狀態服務)或Sql Server的過程。
如果您使用Sql Server來存儲狀態信息,則肯定會獲取數據庫查詢來獲取會話數據。 更多細節這裏 -
我明白它來自認證。但是,當我調用User.Identity.Name - 從哪裏檢索值? Cookies或數據庫或會話? – niaher 2010-04-14 11:48:47
驗證後Cookie只存在...所以...所有內容都取決於您的驗證方案 – Nix 2010-04-14 12:39:03