0

フォーム認証を使用して asp.net アプリケーションでJTable ( http://www.jtable.org/ ) を使用しています。

私の Web アプリケーションは、正常にログインしたユーザーごとにセッションを作成します。

現在、Jtable は静的リストであるデータソースを使用しています。この静的リストが存在するクラスは静的ではありません。

      public class UserSpecificClass
 {     
    [WebMethod(EnableSession = true)]
    public static object PaymentsList(int jtStartIndex, int jtPageSize, string jtSorting)
    {
     //Get data from database
            using (DBDataContext context = new DBDataContext(_staticConnString))
            {
                // LINQ Query - Get userDetails including all relationships to user
                var PaymentDetails = (from t1 in context.Charges
                                      join t2 in context.Invoices on t1.InvoiceID equals t2.ID
                                      where t2.MemberID == 5
                                      select new
                                      {
                                          Related_Invoice = t1.InvoiceID,
                                          Charge_Description = t1.ChargeType.Name,
                                          Charge_Amount = t1.Amount,
                                          Amount_Paid = t1.PaidAmount,
                                          Credited = t1.CreditAmount,
                                          Last_Payment = t2.PaidAmount == 0 ? "Not Paid" : t2.PaidDate.ToString()

                                      }).ToList();

                 _mhubPayments = new List<MHubPaymentsHistory>();
                foreach (var obj in PaymentDetails)
                {
                    MHubPaymentsHistory data = new MHubPaymentsHistory(obj.Related_Invoice, obj.Charge_Description, obj.Charge_Amount,
                                                obj.Amount_Paid, obj.Credited, obj.Last_Payment);

                    _mhubPayments.Add(data);
                }

                //Return result to jTable
                return new { Result = "OK", Records = _mhubPayments, TotalRecordCount = recordCount };
    }
}

これで、静的変数とプロパティが一度作成され、サーバー上のアプリケーション ドメイン全体ですべてのユーザーが利用できることがわかりました...したがって、Web アプリケーションに 1 つの InvoicesList が必要ないことは明らかに懸念事項です..

しかし、新しいユーザーがログインし、上記のクラスからデータを取得したときに、静的オブジェクト (この場合はリスト) が新しくログインしたユーザーに固有のセッションになるかどうかはわかりません。「EnableSession = true」属性が原因ですか?

つまり、作成/発行された 100 個のセッションのそれぞれで 100 人のユーザーがログインした場合、WebMethod(EnableSession) 属性がオブジェクトにアタッチされているということは、ユーザー セッションごとにセッション固有の静的リスト オブジェクトが存在することを意味しますか? これは基本的に、この静的オブジェクトがセッション固有であり、したがってユーザー固有であると言っていますか?

説明をいただければ幸いです。前もって感謝します

4

2 に答える 2

0

メソッドに属性を追加しても、静的フィールドの動作を変更することはできません。

セッション状態を使用する場合は、データを次の場所に保存しますHttpContext.Current.Session

于 2013-06-17T20:27:51.533 に答える