我是不是談論asp.net會員。如何擴展asp.net User.Identity屬性?
對於每個登錄的用戶,我想從數據庫緩存一些屬性,如狀態或朋友請求的數量。
我可以創建自定義類,它會這樣做,但我認爲擴展現有的User.Identity屬性會更好。
事情是這樣的:
Label1.Text = User.Identity.Status;
這是可能的嗎?
我是不是談論asp.net會員。如何擴展asp.net User.Identity屬性?
對於每個登錄的用戶,我想從數據庫緩存一些屬性,如狀態或朋友請求的數量。
我可以創建自定義類,它會這樣做,但我認爲擴展現有的User.Identity屬性會更好。
事情是這樣的:
Label1.Text = User.Identity.Status;
這是可能的嗎?
根據你的例子,我相信你應該在會話數據中緩存諸如朋友請求的狀態和數量。
使用身份進行此緩存的可能缺點是,如果我沒有弄錯,每個請求都會導致創建新的Identity實例。因此,對於每個請求,您需要從某處重新填充這些標識值,無論是數據庫還是您已經緩存數據的某個位置。
可以通過定義自己的IIdentity
(也可能是IPrincipal
)並在爲HTTP請求創建IPrincipal
時構建此選項。我相信正確的位置是PostAuthenticateRequest
事件發生的時候。
在這個其他stackoverflow問題的答案解釋如何做到這一點 - ASP.NET set custom identity or principal(它說MVC,但都通過相同的處理管道)。
感謝您的迴應。 所以我應該創建自己的類來緩存這些屬性? 什麼會更好的會話或服務器緩存? – Adir 2010-07-31 11:19:00
@Adir,取決於您的要求。會話過期時,不再需要緩存的數據,因此會隨會話自動清除。另外,如果您要定位Web場,會話將在服務器之間遷移(假設您正在使用外部會話狀態),並且緩存數據將在需要時在需要時提供。服務器緩存當然可以正常工作,但是生命週期將獨立於會話生存期,如果數據不在緩存中然後重新讀取,它的確有優勢,即刷新緩存的邏輯非常簡單,例如。每10分鐘一班。 – 2010-07-31 12:41:35
每個請求都確實從FormsAuthentication標籤重構了'IPrincipal'和'IIdentity'。你可以擁有一個'IIdentity'方法,該方法只需從源中獲取好友請求的數量,無論是在會話中還是來自其他數據源,這樣就不會將任何數據存儲在實際的身份驗證Cookie中。 – 2010-07-31 19:18:16