ユーザーが正常にログインしたら、DBを1回呼び出して現在のCustomer
オブジェクトを取得し、Session
に保存します。サーバーのメモリを悪用するとは思わないでください。オブジェクトは500バイト未満です。ライブセッションが1000の場合は、サーバーのメモリが500 KB未満です。
また、Cache
と入力してUser ID
と入力し、Customer
オブジェクトを検索することもできます。
Customer
オブジェクトをViewState
に保存することもできますが、サーバー上のメモリは使用されません。
どのページからでもSession
\ Cache
\ ViewState
にアクセスするのはとても簡単です。 Session
については
:
protected void Page_Load(object sender, EventArgs eventArgs)
{
Customer customer = Session["customer"] as Customer;
}
private void LoginSuccess(int customerID) {
Customer customer = _customerRepository.GetById(customerID);
Session["customer"] = customer;
}
** ViewState
ために、それはSession
としてちょうど同じだ - ちょうどViewState
でSession
を交換してください。
あなたは
HttpContext.Current.Cache.Insert("customer" + customerId, customer, new CacheDependency("customer" + customerId), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);
を使用して、あなたはこのようCache
項目にアクセスすることができ、その後Cache
でそれを保存したい場合:
HttpContext.Current.Cache["customer" + customerID]
は、この情報がお役に立てば幸い!
私はクラスの仕組み、特に持続性について誤解していると思います。主に、クラスは永続性を知らない。 HTTPプロトコルはその性質上ステートレスなので、要求が完了するとクラスインスタンスは破棄されます。顧客情報を(クラスオブジェクトであっても)保存するには、ある時点でSession(またはその他の永続化メカニズム)を使用する必要があります。 –
ASP.NETページはステートレスです。グローバルな情報はどこかに保存する必要があります。セッションを正しく使用すると、セッションを悪くすることはありません。 Sessionの内容を最小限に抑えるには、ユーザーのID(または固有ID)を保存し、その顧客に関する情報が必要な場合は、データベースから取得します。 –
私はブライアンと全く同意します。あなたの質問から、オブジェクト指向プログラミングの仕組みが不足しているようです。 – gideon