1

基本的に、アプリケーションにログインしているユーザーの数を制限する必要があります。私がしているのはMembership.GetNumberOfUsersOnline() 、新しいユーザーを認証しているときにログインしているユーザーの数を取得していることです。オンラインユーザーの数を制限したい数にチェックします。 新しいユーザーがログインすると正常に動作します。ユーザーがサインアウトすると、の値が自動的に減少しないMembership.GetNumberOfUsersOnline()場合に問題が発生します。Membership.GetNumberOfUsersOnline()msdnを検索したところ、このメソッドは、サインアウトイベントをサポートしていない最後のユーザーアクティビティ時間をチェックしていることがわかりました。Membershipプロバイダーにユーザー数を制限する他の方法はありますか?私はサービスを使用SilverlightしてRESTいます。Membership.GetNumberOfUsersOnline()サーバー側で使用しています。

よろしくお願いします。

4

3 に答える 3

1

I'm assuming you are using an SqlMembershipProvider. If so, this is the direction I would take...

Create a class that inherits SqlMembershipProvider and override the GetNumberOfUsersOnline() and ValidateUser() methods...

using System.Web.Security;

public class MyMembershipProvider : SqlMembershipProvider
{
    public override bool ValidateUser(string username, string password)
    {
        if (base.ValidateUser(username, password))
        {
            // successfully logged in. add logic to increment online user count.

            return true;
        }

        return false;
    }

    public override int GetNumberOfUsersOnline()
    {
        // add logic to get online user count and return it.
    }
}

Now if you're using a LoginStatus control to allow users to sign out, you can use the LoggedOut event to add the decrement online user count logic there.

You will have to use your new custom membership provider in the web.config. For the type property of your membership, change it from whatever it says, something like type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" to something like type="MyNameSpace.MyMembershipProvider". I think that's all there is to it.

This solution allows you to keep using your SqlMembershipProvider provider with just a couple additions.

于 2012-07-12T06:48:59.713 に答える
1

http://www.sarin.mobi/2008/11/aspnet-csharp-visitor-real-time-session-tracker/で、SarinによるASP.NET C#ビジターリアルタイムセッショントラッカーを試すことができます。

于 2012-07-12T06:37:12.940 に答える
0

データベースのユーザー テーブルに status という名前の新しい列を追加します。その status 列のデータ型はビット (1/0) です。15 分ごとに、オンラインのユーザーがいないことを確認します。コードビハインドページでタイマーを使用します。タイマーを確認し、15分ごとにその特定のイベントを発生させます

于 2012-07-12T06:40:00.300 に答える