会员用户何时不在线?

时间:2012-09-28 08:31:20

标签: c# asp.net .net asp.net-membership user-profile

我遇到了一个问题,当我知道他们不在时,我的用户列表中的每个用户都会在线显示。

当页面加载时,它们显示为脱机,但如果我刷新页面,它们都显示为联机。我假设这是因为我以编程方式访问他们的个人资料信息(CommonProfile)以获取要在gridview上显示的数据?

有没有办法在不触发IsOnline属性的情况下获取配置文件信息?

更新 对不起,代码在这里。请温柔,我对c#& amp; asp.net,我还在学习。

代码从Membership用户和常用配置文件中收集信息,并将字段添加到数据表中,以便我可以在gridview中显示结果。

MembershipUserCollection usersList = Membership.GetAllUsers();
MembershipUserCollection filteredUsers = new MembershipUserCollection();

foreach (MembershipUser user in usersList)
{
    if (!Roles.IsUserInRole(user.UserName, "Admin") && !Roles.IsUserInRole(user.UserName, "Engineering"))
    {
        if (txtFilterCustomerNo.Text.Length > 0)
        {
            ProfileCommon PC = Profile.GetProfile(user.UserName);
            if (PC.CompanyAccountNo == txtFilterCustomerNo.Text.ToUpper())
            {
                filteredUsers.Add(user);
            }
        }
        else
        {
            filteredUsers.Add(user);
        }
    }
}

txtFilterCustomerNo.Text = null;

foreach (MembershipUser user in filteredUsers)
{
    userProfile = Profile.GetProfile(user.UserName);
    string[] userRoles = Roles.GetRolesForUser(user.UserName);

    DataRow orderLine = dataSet.Tables["UserAccounts"].NewRow();
    orderLine["USER_NAME"] = user.UserName;
    orderLine["CREATED"] = user.CreationDate;
    orderLine["LAST_LOGIN"] = user.LastLoginDate;
    orderLine["PASSWORD_CHANGED"] = user.LastLoginDate;
    orderLine["ACTIVE"] = user.IsApproved;
    orderLine["ONLINE"] = user.IsOnline;
    orderLine["LOCKED"] = user.IsLockedOut;
    orderLine["CUSTOMER_NO"] = userProfile.CompanyAccountNo;
    orderLine["HAS_INVENTORY"] = userProfile.HasOwnInventory;
    orderLine["ORDER"] = userRoles.Contains("Order");
    orderLine["REPAIR"] = userRoles.Contains("Repair");
    orderLine["WARRANTY"] = userRoles.Contains("Warranty");
    orderLine["COMMISSIONING"] = userRoles.Contains("Commissioning");
    orderLine["ACCOUNT"] = userRoles.Contains("Account");
    dataSet.Tables["UserAccounts"].Rows.Add(orderLine);
}

if (dataSet.Tables.Contains("UserAccounts"))
{
    GridView1.DataSource = dataSet.Tables["UserAccounts"];
}

1 个答案:

答案 0 :(得分:2)

如果您只是查看GetUser的不同重载,您会看到其中一些重载采用名为userIsOnline的布尔值。如果您将其指定为false,则不会更新上一个在线时间戳,也不会将其列为在线时间。

var user = Membership.GetUser(userid, false);

编辑:

我发现您使用的是GetAllUsers()而不是GetUser()GetAllUsers()存在一些问题,您无法依赖IsOnline属性。相反,您需要检查LastActivityDate字段并找出它与当前DateTime之间的差异。如果时间量大于您认为的“在线”时间,则它们处于脱机状态,否则在线。