2012-03-15 12 views
1

私はログインしたユーザーのリストを見つけるために私のアプリケーションで次の使用しました。ログインしたユーザーのリストを表示しますが、ブラウザを閉じてブラウザの履歴をクリアすると、ユーザーのisonlineステータスがtrueになります。私が間違っている場所を教えてください。Asp.net会員ログインユーザーリスト

ユーザーサインインがユーザを検証し、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は、ユーザーがオンラインかどうかを非常に正確にチェックするものではありません。現在の日付と時刻の場合

マイナス UserIsOnlineTimeWindowプロパティ値は、ユーザーの LastActivityDateよりも前である:MSDNからは、ユーザーがオンラインであると判断されます。

これは、ユーザーがログインしてから10秒後にログアウトして、それでもオンラインとみなせることを意味します。

あなたがログインしていて、カウントをチェックしている、ログアウトしている、ブラウザを閉じている、キャッシュをクリアしている、などのユーザのLastActivityDateは、あなたにできることは次のとおりです。

  • は(個々のログアウト時に、(いくつかの望ましくない副作用に 効果を得ることができる)時間ウィンドウ
  • を短縮上記のチェックは無効になるだろう 時間に自分のLastActivityDateを更新します例えば、現在の時刻 UserIsOnlineTimeWindow
  • 更新特定のキーポイント(例えば、 で手動LastActivityDateサイトが は、彼らがカートにアイテムを追加するときに多分LastActivityDateを更新し、書店であれば)
関連する問題