我在我的应用程序中使用了以下内容来查找登录用户列表。它给出了登录用户的列表,但是当我关闭浏览器并清除浏览器历史记录时,它会显示用户isonline status为true。请任何人告诉我我错在哪里?
当用户登录验证用户并重定向到网址时
if (user != null)
{
if (Membership.ValidateUser(user.UserName, txtUserPassword.Text))
{
FormsAuthentication.SetAuthCookie(txtUserName.Text, false);
}
}
登录用户代码列表
MembershipUserCollection allUsers = Membership.GetAllUsers();
MembershipUserCollection filteredUsers = new MembershipUserCollection();
bool isOnline = true;
foreach (MembershipUser user in allUsers)
{
// if user is currently online, add to gridview list
if (user.IsOnline == isOnline)
{
filteredUsers.Add(user);
}
}
答案 0 :(得分:1)
不确定为什么你的投票结果为负,这是一个有效的问题。您也可能永远不会看到这个答案,但其他人可能会遇到同样的问题。
MembershipUser.IsOnline
不能非常准确地检查用户是否在线。从MSDN开始,用户决定在线:
如果当前日期和时间减去 UserIsOnlineTimeWindow属性值早于 用户的LastActivityDate。
这意味着用户可以登录,然后在10秒后退出并仍然被视为在线。
因此,在您的情况下,您正在登录,检查计数,注销,关闭浏览器,清除缓存等,但用户的LastActivityDate
仍然属于上述假设窗口。你能做的是:
LastActivityDate
更新为a
使上述检查无效的时间(例如,当前时间
UserIsOnlineTimeWindow
)LastActivityDate
(例如,
如果您的网站是书店,可能会更新LastActivityDate
他们将一个项目添加到购物车中)答案 1 :(得分:0)