0

私のアプリケーションでは、その時点でユーザーがログインするときに、Web アプリケーションの多くの場所で使用したい姓、名、ID、従業員 ID などのユーザーの情報を保存します。以前はフォーム認証を使用していました

FormsAuthentication.SetAuthCookie(empDetails.Employee.EmployeeId, false);

ただし、パラメーターは 1 つしか格納されません。アプリケーションで使用する複数のデータを保存したいと考えています。

誰でもこれを行うための最良の方法を教えてもらえますか?

4

3 に答える 3

1

authcookieを使用して文字列を保存できます。この文字列は、必要なすべてのデータをエンコードできます。私は通常、保存したいすべての情報を持つオブジェクト(ConnectedUserクラスなど)を作成します。次に、クラスのToString()をオーバーライドして、後でデコードしてConnectedUserインスタンスを再構築できる形式の文字列を返します。これは、すべてのモデルが単一のベースモデルから継承し、ベースモデルがConnectedUserタイプのプロパティを持つことができ、DefaultModelBinderを拡張し、OnModelUpdated()をオーバーライドして、接続されたユーザーのインスタンスを再構築する場合にさらに簡単になります。通常、これはrequestcontextを受け入れるメソッドを介して行います。たとえば、何らかの理由でmodelbinderが呼び出されていない場合は、コード内の他の場所から呼び出すことができます。

編集

    public class ConnectedUser{

        public string FirstName{get;set;}
        public string LastName{get;set;}
        public override string ToString(){
            return string.format("FirstName{0}{1}{2}LastName{0}{3}",EqualDelimiter, FirstName, EntryDelimiter, LastName);
        }
     }

そして、userIdを渡す代わりに、Auth cookieのコンストラクターで、FirstNameとLastNameが入力されたConnectedUserのインスタンスを渡します。リクエストを受信すると、これら2つのメソッドを使用して接続されたユーザーを取得できます。 defaultModelBinderのカスタム拡張またはアクションメソッド内など。

    public static ConnectedUser GetConnectedUser(HttpContextBase executingContext)
    {
            var dictionary = GetAuthCookieData(executingContext);
            var toRet = new ConnectedUser
            {
                FirstName = dictionary["FirstName"],
                LastName= dictionary["LastName"]
            }
            return toRet;
     }
     public static IDictionary<string, string> GetAuthCookieData(HttpContextBase executingContext)
    {
        HttpCookie toCheck = executingContext.Request.Cookies[FormsAuthentication.FormsCookieName];
        FormsAuthenticationTicket decrypted = FormsAuthentication.Decrypt(toCheck.Value);
        string userData = decrypted.UserData;
        return userData.ToDictionary<string, string>();
    }

DefaultModelBinderの拡張は簡単ですが、Global.asaxに登録することを忘れないでください。両方を行う方法については、オンラインでたくさんの記事があります。

于 2013-01-16T09:30:05.910 に答える
1

あなたの問題については、あなたの値をに保存することをお勧めします HTTPCOntext.Current.Session

まず、このようなクラスを作成します

    public class CurrentCustomer
    {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Email { get; set; }

            private string _Token;
            public string Token
            {
                get
                {
                    return _Token;
                }
                set
                {
                    _Token = value;
                }
            }
     }

次に、ユーザーのログイン後(ユーザーが承認されたときを意味します)、必要なすべてのデータを取得して CurrentCustomer オブジェクトに入力し、次のように Seeion を作成します

HttpContext.Current.Session[CurrentCustomer] = CurrentCustomer;

そして、その値が必要な場所で CUrrentCUstomer オブジェクトを作成します。

CurrentCustomr obj = ((CurrentCustomer)HttpContext.Current.Session[CurrentCustomer]);

必要なのはそれだけです。

于 2013-01-16T10:22:00.820 に答える
0

必要なすべてのパラメーターを含む JSON 文字列を保存できます。

{name:"NAME",id:"IDENTIFIER",email:"EMAIL"}

次に、復元時に解析します。

于 2013-01-16T09:32:25.863 に答える