2011-02-11 50 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