0

Web サイトでユーザー ログイン用のセッションを作成しています。セッションを初期化してそのメンバーを問題なく使用できますが、それ自体を格納するセッション クラス内のメソッドも必要です。入力パラメーターとして提供HttpSessionStateし、次のようなオブジェクトに格納する必要がありますSession["sessionName"]=this;

さらに、セッションを取得したいときは、まだ作成されていないため、静的でなければなりません。次に、プロパティ (ユーザー名と会社 ID) を .xml ファイルから入力して、セッション クラスの新しいインスタンスを返す必要がありますHttpSessionState

セッションクラスでこれを行うにはどうすればよいですか? 上記で説明したことは、私の問題に対する特定の解決策を提供する私が行った調査からのものですが、私はセッションの使用に慣れていないため、よくわかりません。ありがとう。

私のセッションクラスのスニペット:

public class MySession : System.Web.UI.Page
    {
        private MySession()
        {
            Username    = Business.User.labelUsername;
            CompanyId   = Business.User.labelCompanyId;
        }

        public static MySession Current
        {
            get
            {
                try
                {
                    MySession session = (MySession)HttpContext.Current.Session["sessionName"];

                    if (session == null)
                    {
                        session = new MySession();
                        HttpContext.Current.Session["sessionName"]=session;
                    }
                    return session;
                }
                catch (NullReferenceException e)
                {
                    Debug.WriteLine("NullReferenceException:");
                    Debug.WriteLine(e);
                }
                return null;
            }
        }

        public string Username
        {
            get; set;
        }

        public string CompanyId
        {
            get; set;
        }
    }
4

2 に答える 2

3

シリアル化された「セッション情報」オブジェクトを使用してみることができます。

[Serializable]
public class SessionInfo
{
    // Stuff to store in session
    public string Name { get; set; }
    public int Foo { get; set; }

    private SessionInfo()
    {
        // Constructor, set any defaults here
        Name = ""
        Foo = 10;
    }

    public static SessionInfo Current
    {
        get
        {
            // Try get session info from session
            var info = HttpContext.Current.Session["SessionInfo"] as SessionInfo;

            // Not found in session, so create and store new session info
            if (info == null)
            {
                info = new SessionInfo();
                HttpContext.Current.Session["SessionInfo"] = info;
            }

            return info;
        }
    }
}

次に、次のようにアプリケーション内からこれを使用できます。

SessionInfo.Current.Name = "Something Here";
SessionInfo.Current.Foo = 100;

シリアル化/逆シリアル化はすべてSessionInfoオブジェクト内で行われ、タイプセーフなデータを利用できます。

于 2013-01-10T20:32:11.543 に答える
1

あなたが求めているのは、シリアライゼーションとデシリアライゼーションと呼ばれます。

シリアル化とは、オブジェクトを取得し、それを文字列などの保存可能な形式に変換することです。逆シリアル化は、そのアクションの逆です。

「簡単な」方法は、[Serializable]属性をクラスに追加することです。ただし、そのクラスの詳細を知らなければ、実際に少し作業しなくても簡単にシリアル化できるかどうかを判断するのは困難です。

チュートリアルは次のとおりです: http://msdn.microsoft.com/en-us/library/vstudio/et91as27.aspx

于 2013-01-10T20:25:26.977 に答える