0

ログイン時にセッションを作成しました。そのセッションにユーザー オブジェクトを配置しました。

public sealed class MyContext
{

    [ThreadStatic]
    private static MyContext staticContext = null;
    public HttpContext Context
    {
        get
        {
            return HttpContext.Current;
        }
    }


    private MyContext()
    {

    }

    public static MyContext Current
    {
        get
        {
            MyContext myContext = null;
            HttpContext context = HttpContext.Current;
            if (context != null)
            {

                //it in the Items collection (a per request store)
                if (context.Items.Contains("CONTEXT_KEY"))
                    myContext = context.Items["CONTEXT_KEY"] as MyContext;
                else
                {
                    myContext = new MyContext();
                    myContext.Context.Items["CONTEXT_KEY"] = myContext;
                }
            }
            else if (staticContext != null)
            {
                myContext = staticContext;
            }
            else
            {
                //create a new instance of static context as there is no web request
                staticContext = new MyContext();
                myContext = staticContext;
            }
            return myContext;
        }
    }

    public MyUser User
    {
        get
        {
            MyUser user = null;
            if (Current.Context.Session["LoggedInUser"] != null)
                user = (MyUser)Current.Context.Session["LoggedInUser"];
            else
            {
                user = UserDetail.GetUser(HttpContext.Current.User.Identity.Name);
                if (user == null)
                {
                    //if there is no userID, create anonymous user
                    user = new MyUser();
                    user.IsAnonymous = true;
                    user.UserID = 0;
                }
                //cache in session
                Current.Context.Session["User"] = user;
            }
            return user;
        }
        set
        {
            Current.Context.Session["User"] = value;
        }
    }


}//end class

現在、アプリケーション全体でこのコンテキストを使用しています。ユーザーがログインしていて、同時に管理者がそのユーザーを非アクティブ化すると、問題に直面しています。ユーザーの情報がセッションにあるため、ユーザーのアクティビティを停止できません。管理者がそのユーザーを非アクティブ化するときに、その特定のユーザーの情報を更新する方法を教えてください。

4

3 に答える 3

0

私があなたの質問をよく理解していれば、イベントを作成することしかできません! 管理者がユーザーを非アクティブ化すると、イベントが生成される可能性があり、ユーザー セッションはすぐにそれに応答します。それは単なるアイデアです。私はセッションに慣れていません。

于 2013-03-27T18:25:45.957 に答える
0

もし私がその状況にいたら。バックエンドを時々チェックしてユーザーを再認証するために、いくつかのコードをリファクタリングする必要があります。

于 2013-03-27T18:26:56.267 に答える
0

各受信ページ要求をチェックして、ユーザーが非アクティブ化されているかどうかを確認し、非アクティブ化されている場合はセッション変数をリセットする必要があります。たとえば、Page クラスを継承し、Page_Load をオーバーライドする基本クラスを作成できます。基本クラス Page_Load でチェックを実行できます。チェックが必要なすべてのページ (おそらくすべてのページ) では、Page クラスではなく Base クラスを継承する必要があります。

于 2013-03-27T18:31:26.993 に答える