Asp.net会员登录用户列表

时间:2012-03-15 09:52:34

标签: asp.net

我在我的应用程序中使用了以下内容来查找登录用户列表。它给出了登录用户的列表,但是当我关闭浏览器并清除浏览器历史记录时,它会显示用户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);
   }
 }

2 个答案:

答案 0 :(得分:1)

不确定为什么你的投票结果为负,这是一个有效的问题。您也可能永远不会看到这个答案,但其他人可能会遇到同样的问题。

MembershipUser.IsOnline不能非常准确地检查用户是否在线。从MSDN开始,用户决定在线:

  

如果当前日期和时间减去   UserIsOnlineTimeWindow属性值早于   用户的LastActivityDate。

这意味着用户可以登录,然后在10秒后退出并仍然被视为在线。

因此,在您的情况下,您正在登录,检查计数,注销,关闭浏览器,清除缓存等,但用户的LastActivityDate仍然属于上述假设窗口。你能做的是:

  • 缩短时间窗口(可能产生一些不需要的方面 效果)
  • 在记录个人时,将他们的LastActivityDate更新为a 使上述检查无效的时间(例如,当前时间 UserIsOnlineTimeWindow
  • 在某些关键点手动更新LastActivityDate(例如, 如果您的网站是书店,可能会更新LastActivityDate 他们将一个项目添加到购物车中)

答案 1 :(得分:0)