我正在使用ASP.NET成员资格和角色提供程序。我的问题是,是否有内置的方法来报告当前登录的用户数。问题不是获取有关登录用户的信息,而是从登录的每个人的高级视图获取。
我想创建一个用户管理信息中心,这个指标会很棒。同时显示当前登录用户的用户名也很有用。
感谢您提供的任何帮助。
答案 0 :(得分:2)
是的,有内置方式,请参阅Membership.GetNumberOfUsersOnline()。您可以更改在线考虑的“窗口”,请参阅Membership.UserIsOnlineTimeWindow。 (您在web.config中设置阈值)
<强>更新强>:
回应您关于获取在线用户名列表的评论......
会员资格API缺乏你想要的,所以你必须自己动手。您可以使用以下作为入门代码,它类似于我过去所做的:
public static List<string> GetUsersOnline() {
List<string> l = new List<string>();
string CS = WebConfigurationManager
.ConnectionStrings[YOUR_WEB_CONFIG_KEY]
.ConnectionString
;
string sql = @"
SELECT UserName,LastActivityDate
FROM aspnet_Users
WHERE LastActivityDate > @window
ORDER BY LastActivityDate DESC"
;
using (SqlConnection c = new SqlConnection(CS) ) {
using (SqlCommand cmd = new SqlCommand(sql, c) ) {
DateTime window = DateTime.UtcNow.AddMinutes(
-Membership.UserIsOnlineTimeWindow
);
cmd.Parameters.AddWithValue("@window", window);
c.Open();
using (SqlDataReader r = cmd.ExecuteReader() ) {
while ( r.Read() ) {
l.Add(r.GetString(0));
}
}
}
}
return l;
}
几点说明:
YOUR_WEB_CONFIG_KEY
替换为您的web.config <connectionStrings>
部分中的密钥。LastActivityDate
表(aspnet_Users
数据库)中的aspnetdb
字段存储为GMT / UTC Datetime
值,这就是使用DateTime.UtcNow
的原因计算窗口。