ASP.NET | 表单身份validation| 获取所有登录用户(所有用户列表或计数)

我使用的是.NET 3.5。 此外,还使用了表单身份validation。

有没有办法获取所有登录用户的列表或ASP.NET中的计数

注意:我没有使用会员资格和角色

没有,除非

  1. 您已在自己的代码中定义了一个

  2. 您正在使用默认的ASPNET成员资格提供程序,该提供程序定义了GetNumberOfUsersOnline()方法。

  3. 您正在使用自定义成员资格提供程序,并自己提供了GetNumberOfUsersOnline()方法的实现

默认的ASPNET成员资格提供程序通过查询SQL Server数据库并根据您可以在web.config中设置的已定义的UserIsOnlineTimeWindow属性检查针对每个用户存储的LastActivityDate来计算在线用户数。 如果LastActivityDate大于当前时间减去UserIsOnlineTimeWindow值(表示分钟),则认为用户在线。

如果你想做类似的事情,那么你可以考虑实现类似的方法。 您可以通过下载源代码来查看默认提供程序的代码 。 要完成图片,您可能还需要运行aspnet_regsql.exe,以便可以查看默认提供程序使用的存储过程。

会员提供商确实有其优势,但只是为了在线跟踪用户,您还可以:

  1. LastActivityDate列添加到您的用户表,并在登录期间以及该用户的所有页面加载时从您的代码更新它。

  2. 要获得过去X分钟的usersonline,只需使用以下sql

     Select * from Users where LastActivityDate > DATEADD(minute, -(X), GETDATE()) 

表单身份validation将所有状态存储在传递给用户浏览器的cookie中。

(这使表单身份validation可以在Web场上运行)

因此,无法从标准表单身份validation中获取已记录用户的列表等。

但是,表单身份validation具有在对用户进行身份validation时触发的事件等。您可以在这些事件中更新自己的用户列表 – (如果这样做,请小心锁定)

但是,当浏览器使cookie过期时,用户将被“登录”,您会发现很难从列表中正确删除所有已记录的用户。


您可能最好在上次查看每个用户的时间内存储,然后在最近5分钟内找到您所见过的用户列表。 例如,保留活动用户列表。

我在Global.aspx下使用了Session_Start和Session_End。 除了用户关闭他/她的浏览器之外,它大部分时间都有效。 服务器端需要等待会话过期才能删除用户。