2010-12-20 5 views
2

いくつかのWebコードを確認していますが、ASP.netセッション状態の仕組みが正確にはわかりません。どんな援助も感謝していただければ幸いです。asp.netのセッション状態から値を保存して取得する

ログイン中にユーザーオブジェクトがセッション状態に保存され、User.FirstNameとUser.LastNameが設定されている場合。他のWebページがセッションからユーザーオブジェクトを取得し、FirstNameを別のWebページに設定すると他のWebページにも永続化されますか?または、変更されたセッションにユーザーオブジェクトを再度追加する必要がありますか?ありがとう

答えて

3

セッションはサーバー上で維持されますが、はクライアント経由でと追跡されます。私はクライアントを介して繰り返す。

ほとんどの場合、セッションはCookieで追跡されます。したがって、あなたの例を使用して、ユーザーオブジェクトがセッションに保存されるとき:

Session["UserInfo"] = new User { FirstName = "Joe", LastName = "Bloggs" }; 

クッキーは一意の識別子でクライアントに送信されます。このクッキーは、期限切れになるまで、このクライアント/ブラウザーからのすべてのHTTP要求に渡されます。

初めて(別のマシンから)別のユーザーが来た場合、Session["UserInfo"]はnullになります。

Cookieの代わりに「cookieless-session」があります。セッションIDを保存するためにクッキーを使用する代わりに、識別子がURLに追加されます。

答えはありません。他のWebページ(他のクライアント/マシン/ブラウザなど)はこの情報にアクセスできません。

Webサーバーからの異なるクライアント間で情報を共有する場合は、キャッシュを使用してください。

質問の文脈(ユーザー情報)が与えられている場合、特定のユーザーにのみ関連するので(共有しないでください)、この情報をセッションに保存することは有効です。

セッションでユーザー情報を固執する代わりに、多くの人が使用する代替方法は、フォーム認証チケットに添付される一般的な原則に入れることです。

あなたが選んだ道路まで。

1

オブジェクトに対する変更はすべて永続化されます。

+0

OKをセッションの周りに頭を得るのを助ける必要があり、そうであれば上私のページ私はセッションを介して私のユーザーオブジェクトを取得し、自分のページレベルのユーザー変数を設定します。ページ・レベルの変数を介してユーザー・オブジェクトを更新すると、セッション・ユーザー・オブジェクトが自動的に更新されますか? – Bobbo

+1

はい。アプリケーションがサーバファームで実行されている場合を除き、セッションデータはサーバメモリ(inproc)に保持されているオブジェクトに過ぎません。 ASP.NETは、どのクライアントからの要求がIDから来ているのかを把握し、そのIDを使用して正しいセッション辞書が要求を処理するコードであることを確認しますが、辞書を変更しません。あなたが行ったすべての変更、またはそれが指し示すオブジェクトの変更は持続します。 – Mud