2012-03-15 60 views
1

我在我的應用程序中使用以下內容來查找登錄用戶的列表。它給出登錄用戶的列表,但是當我關閉瀏覽器並清除瀏覽器歷史記錄時,它顯示用戶isonline狀態爲true。請任何人告訴我我錯在哪裏?Asp.net Membership登錄用戶列表

當用戶簽到正在驗證用戶重定向到URL,下面的鏈接登錄的用戶代碼

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); 
    } 
} 

回答

1

不確定爲什麼你有負面的投票,這是一個有效的問題。你也可能永遠不會看到這個答案,但其他人可能會遇到同樣的問題。

MembershipUser.IsOnline不是一個非常準確的檢查用戶是否在線。從MSDN,用戶被確定爲在線:

如果當前日期和時間減去 UserIsOnlineTimeWindow屬性值是早於 LastActivityDate用戶。

這意味着用戶可以登錄,然後在10秒後註銷並仍然在線。

因此,在您的情況下,您正在登錄,檢查計數,註銷,關閉瀏覽器,清除緩存等,但用戶的LastActivityDate仍落入上述假定窗口內。你可以做的是:

  • 縮短的時間窗口(可產生一些不必要的副作用 效果)
  • 登錄個人出來的時候,更新LastActivityDate到 時間,這將使上述檢查無效(例如,當前時間 UserIsOnlineTimeWindow
  • 更新手動LastActivityDate在某些關鍵點(例如, 如果你的網站是書店,也許更新LastActivityDate時 他們將項目添加到購物車)