2010-07-30 27 views
4

我是不是談論asp.net會員。如何擴展asp.net User.Identity屬性?

對於每個登錄的用戶,我想從數據庫緩存一些屬性,如狀態或朋友請求的數量。

我可以創建自定義類,它會這樣做,但我認爲擴展現有的User.Identity屬性會更好。
事情是這樣的:

Label1.Text = User.Identity.Status; 

這是可能的嗎?

回答

3

根據你的例子,我相信你應該在會話數據中緩存諸如朋友請求的狀態和數量。

使用身份進行此緩存的可能缺點是,如果我沒有弄錯,每個請求都會導致創建新的Identity實例。因此,對於每個請求,您需要從某處重新填充這些標識值,無論是數據庫還是您已經緩存數據的某個位置。

+0

感謝您的迴應。 所以我應該創建自己的類來緩存這些屬性? 什麼會更好的會話或服務器緩存? – Adir 2010-07-31 11:19:00

+0

@Adir,取決於您的要求。會話過期時,不再需要緩存的數據,因此會隨會話自動清除。另外,如果您要定位Web場,會話將在服務器之間遷移(假設您正在使用外部會話狀態),並且緩存數據將在需要時在需要時提供。服務器緩存當然可以正常工作,但是生命週期將獨立於會話生存期,如果數據不在緩存中然後重新讀取,它的確有優勢,即刷新緩存的邏輯非常簡單,例如。每10分鐘一班。 – 2010-07-31 12:41:35

+0

每個請求都確實從FormsAuthentication標籤重構了'IPrincipal'和'IIdentity'。你可以擁有一個'IIdentity'方法,該方法只需從源中獲取好友請求的數量,無論是在會話中還是來自其他數據源,這樣就不會將任何數據存儲在實際的身份驗證Cookie中。 – 2010-07-31 19:18:16