2010-04-14 137 views
6

例如:如果我正在檢索User.Identity.Name,它是來自.ASPXAUTH cookie還是使用我的成員資格提供程序從數據庫中檢索?User.Identity數據來自哪裏?

當我訪問User.Identity時是否有任何數據庫請求?

謝謝。


編輯:現在我敢肯定它來自一個身份驗證票證的cookie,但找不到任何官方文件證實了這一點。任何人?

回答

1

這應該回答你的問題......

「窗體身份驗證票證不僅包括用戶的身份,同時也包含信息以幫助確保完整性和安全性令牌「。

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餅乾詳細地說,雖然我上面引用的文章似乎更加流行。

0

.ASPXAUTH cookie/User.Identity來自身份驗證(Windows,Forms)。

如果你正在試圖獲得會員用戶需要使用

Membership.GetUser() 

Membership.GetUser(User.Identity.Name) 

documentation here這將導致一個DB調用。

+0

我明白它來自認證。但是,當我調用User.Identity.Name - 從哪裏檢索值? Cookies或數據庫或會話? – niaher 2010-04-14 11:48:47

+0

驗證後Cookie只存在...所以...所有內容都取決於您的驗證方案 – Nix 2010-04-14 12:39:03

1

我相信認證信息是特定於會話並維護在ASP.net進程或外部甚至SQL服務器。一旦用戶通過身份驗證,將生成一個會話令牌,該令牌用於跟蹤狀態服務中經過身份驗證的用戶的信息。在隨後的請求中,會話令牌用於檢索用戶身份,並在那裏獲取預先填充的對象(如User.Identity.Name)。這必須在Forms Authentication模塊或Windows身份驗證模塊中使用,具體取決於使用的身份驗證類型。如果您設置爲無cookie身份驗證模式,會話令牌將顯示在URL中。一旦會話過期,與會話有關的所有信息將從狀態服務中刪除。

希望這個清楚!

+0

即使它是一個被接受的答案,但它並不能真正回答我的問題。 – niaher 2010-05-24 14:08:16

+0

那你爲什麼接受它? – IsmailS 2010-06-04 10:22:59

+0

因爲這個問題是在賞金的,所以我被迫做了。 – niaher 2011-01-13 13:34:34

1

這取決於您使用的會話類型。可以通過使用兩個參數來改變會話 1.使用Cookies-Cookieless或使用Cookie 2.存儲會話狀態信息-Inproc(進程中),outproc(ASP.net狀態服務)或Sql Server的過程。

如果您使用Sql Server來存儲狀態信息,則肯定會獲取數據庫查詢來獲取會話數據。 更多細節這裏 -

http://www.codeproject.com/KB/aspnet/ExploringSession.aspx