ASP.NET | 窗体身份验证| 让所有登录的用户(所有用户的列表或计数)(ASP.NET

2019-09-02 14:45发布

我使用.NET 3.5。 此外,使用窗体身份验证。

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

注意:我不使用成员资格和角色

Answer 1:

没有没有,除非

  1. 你已经在自己的代码中定义一个

  2. 您正在使用具有默认ASPNET成员资格提供GetNumberOfUsersOnline()定义的方法。

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

默认ASPNET会员提供通过查询SQL Server数据库和检查在线计算用户数量LastActivityDate存储抵减定义的每个用户UserIsOnlineTimeWindow ,你可以在web.config中设置属性。 如果LastActivityDate比当前时间减去更大UserIsOnlineTimeWindow值(代表分钟),然后用户被认为是在线。

如果你想要做类似的东西,那么你可能会考虑实施类似的方法。 你可以看到默认提供的代码下载源代码 。 要完成你的照片,你可能还需要运行aspnet_regsql.exe的 ,这样你可以看到存储过程,默认的供应商使用。



Answer 2:

会员供应商确实有它的好处,但只是在网上跟踪用户还可以:

  1. 一列LastActivityDate添加到您的用户表和登录时对所有页面加载该用户从您的代码更新。

  2. 并获得usersonline在过去的X分钟只需要使用下面的SQL

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


Answer 3:

窗体身份验证存储在传递给用户的浏览器cookie中的所有它的状态。

(这使窗体身份验证上的Web农场工作)

因此,有没有办法让登录的用户从标准窗体身份验证等的列表。

然而窗体身份验证有当用户进行身份验证等,你可以在这些事件中更新自己的用户列表,它触发事件 - (小心锁,如果你这样做)

但是作为一个用户将被“记录的”如果cookie是由浏览器过期,你会发现它很难正确删除从列表中的正确的时间所有的登录用户。


您可能是更好地保存你上一次看见每个用户,然后让你在说最后5分钟看到用户列表的时间。 例如,保持活跃的用户列表。



Answer 4:

我用在session_start和Session_End中Global.aspx下。 它工作的时候大多数用户除了关闭他/她的浏览器。 服务器端需要等待会话过期删除用户。



文章来源: ASP.NET | Forms Authentication | Get ALL logged in users(list of all users or count)