13

現在、Visual Studio 2010 を使用して Web サイトを作成しています。ユーザー認証には、SQL Server 2008 の既定のメンバーシップ スキーマを使用しています。今、私は次の問題に直面しています。

ユーザーがログアウトするとき、そのユーザーの Membership.IsOnline プロパティを false に設定する必要があります。しかし、それは起こっていません。そのユーザーのmembership.IsOnlineプロパティはまだtrueです。

LoginStatus コントロールを使用して、ユーザーにログアウト リンクを提供しています。

FormsAuthentication.SignOut() の後でも User.IsOnline = trueに従うようにしました。しかし、結果は何もありません。

4

1 に答える 1

15

私の知る限り、FormsAuthentication.SignOutはメンバーシップ システムと直接関係がありません。LastActivityDateしたがって、質問で述べたように、手動で更新する必要があります。また、-2 の代わりにMembership.UserIsOnlineTimeWindowを使用してください。

MSDN から

UserIsOnlineTimeWindow プロパティの値は、GetNumberOfUsersOnline の呼び出し中にチェックされます。ユーザーの LastActivityDate が、現在の日時から UserIsOnlineTimeWindow の値 (分単位) を引いた値より大きい場合、そのユーザーはオンラインと見なされます。MembershipUser クラスの IsOnline プロパティを使用して、メンバーシップ ユーザーがオンラインと見なされるかどうかを判断できます。

MembershipUser user = Membership.GetUser(false);

FormsAuthentication.SignOut();

user.LastActivityDate = DateTime.UtcNow.AddMinutes(-(Membership.UserIsOnlineTimeWindow + 1));
Membership.UpdateUser(user);
于 2012-05-06T03:53:06.203 に答える