2011-02-11 44 views
1

據我所知,.Net成員資格的基本實現記錄了lastuserlogin,但不跟蹤每個登錄,我現在需要做的事情。我已經做了一些研究,我很確定一種方法是創建一個自定義類,使用此功能擴展當前提供程序,並向模式添加事件表以記錄每個登錄。什麼是擴展.Net成員來跟蹤用戶登錄的好方法

我已經看到了一些關於此的文章 - 最接近可能是從斯科特米切爾http://dotnetslackers.com/articles/aspnet/Tracking-User-Activity.aspx這一個,但它是從2008年11月,我很好奇,如果任何人都可以指向我一個更好的解決方案,或確認這仍然解決這個問題的「最佳」方法。我會想象這是一個相當普遍的要求。我還在使用.Net(使用C#),所以任何和所有信息將不勝感激。

編輯

進展,但沒有完全那裏。添加以下代碼來創建在登錄活動表的新紀錄:

 if (Request.IsAuthenticated) 
     { 
      MembershipUser currentUser = Membership.GetUser(false); 
      string App1 = Membership.Provider.ApplicationName; 
      string username = currentUser.UserName; 
      object guid1 = currentUser.ProviderUserKey; 
      aspnet_CustomActivity login = new aspnet_CustomActivity 
      { 
       UserId = (Guid) guid1, 
       ActivityID = 1, //login 
       DateTime = dt1, 
       ApplicationName = App1     
      }; 
      db.aspnet_CustomActivities.InsertOnSubmit(login); 
      db.SubmitChanges(); 
     } 

所以我有一個小問題,我注意到了應用程序名稱是空白的,當我試圖改變它在web.config中它導致了錯誤得到currentUser.username,但我想我可以解決這個問題。

我現在需要完成的工作就是將其綁定到登錄頁面,我想我可以根據下面的提示來做到這一點。完成後我會再次發佈以完成答案。

回答

2

我們只是創建了一個擴展SqlMembershipProvider的類,覆蓋了ValidateUser方法來執行我們想要的任何額外的邏輯。 (您只需更改web.config文件的<membership>部分即可使用此新成員資格提供程序)。

編輯

還有的實在不多了。您在架構中創建一個表,該表引用標準成員資格表中基於Guid的用戶標識。您創建一個類來管理與此表的交互。你創造了你的會員供應商:

public class MyMembershipProvider : SqlMembershipProvider 
{ 
    public override bool ValidateUser(string username, string password) 
    { 
     bool validated = base.ValidateUser(username, password); 
     if (validated) 
     { 
      MembershipUser user = GetUser(username, false); // built in to SqlMembershipProvider 
      new LoginTracker().RegisterLogin((Guid)user.ProviderUserKey); 
     } 
     return validated; 
    } 
} 

然後你在web.config中註冊這個提供:

<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="60"> 
    <providers> 
    <clear/> 
    <add name="MyMembershipProvider" ... type="MyAssembly.MyNamespace.MyMembershipProvider, MyAssembly"/>   
    </providers> 
</membership> 

簡單!

+0

剝離,這絕對是我期望的正確解決方案......很高興看到它應該是'簡單':)。話雖如此,你能否指出我正確的方向?我沒有在標準方法http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.validateuser.aspx上看到很多文檔,所以我不確定如何有效地擴展它。 – nycdan 2011-02-11 20:51:23