0

Web ファームに展開されるオンライン ショッピング Web サイトを作成しました。この結果、ASP.NET が提供する Stateserver Session Management を使用することにしました。これで、ログインページができました。ユーザーが正常にログインした後、カタログ ページにリダイレクトし、その後ショッピング カートに書籍を追加できるようにします。

私が理解したことから、セッションはキーと値のペアの形式で保存されます。したがって、特定のユーザー (たとえば、彼の名前は「abc」) のセッションを作成する場合は、次のようにします。

Session["abc"]=tmp; //where tmp is a "List" of items that "abc" has added to the cart

彼が別のページにリダイレクトされた後、このセッションを取得するにはどうすればよいですか? 私が読んだことから、私は書かなければならないでしょう:

temp=Session["abc"] 

このユーザー名をパラメーターとして別のページに送信するにはどうすればよいですか。これは Web ファーム上にあるため、クライアントは要求ごとに異なるサーバーに接続でき、複数のクライアントが同時にログインする可能性があります。したがって、それぞれのユーザー名をキーとしてすべてのセッションを作成すると、別のページを閲覧しているときにセッションを取得するにはどうすればよいでしょうか?

私はセッション ID の正確な働きを理解していないと思うので、誰かが私を助けてくれれば素晴らしいことです。

4

2 に答える 2

1

スティッキー セッションを使用していない場合 (つまり、セッションが作成されると、ロード バランサーは常に同じボックスへの要求を維持します)、web.config で OutOfProc 状態プロバイダーが次を指すように構成されていることを確認する必要があります。 ASP.NET 状態サービスを実行しているサーバーの IP アドレス - デフォルトでは、localhost を指します -

また、Session に入れるすべてがシリアライズ可能であることを確認する必要があります (つまり、クラスを [Serializable] 属性で装飾します)。

私の経験では、これが最も単純なアプローチであるため、ロード バランサーでスティッキー セッションがオンになっているのを常に見てきました。スティッキー セッションが使用されていない場合は、おそらく SQL 状態プロバイダーまたは他の何か (デシリアライゼーション/シリアル化をより高速に実行できる他の製品) を使用してこれを処理します。

于 2013-03-19T07:30:34.863 に答える
0

このユーザー名をパラメーターとして別のページに送信するにはどうすればよいですか。

送信する必要はありません。Sessionオブジェクトはページ応答の一部ではなく、サーバー側に存在します。したがって、ページ A で設定し、提供した同じコードを使用してページ B で取得できる場合があります。

Session["abc"]=tmp;

temp=Session["abc"] 

したがって、それぞれのユーザー名をキーとしてすべてのセッションを作成すると、別のページを閲覧しているときにセッションを取得するにはどうすればよいでしょうか?

セッションでオブジェクトを保存するために使用したのと同じキーで取得できます。実際のところ、すべてのユーザーに同じキーを使用できます。例えば:

username=Session["username"] 

注: .Net は、各ユーザーに割り当てられた一意の識別子 (ユーザーの SessionId) を使用して、各オブジェクトの適切なインスタンスを取得します。ただし、これはコードに対して透過的です。

この質問には、StateServer セッションを使用する際の落とし穴がいくつかリストされています

于 2013-03-19T07:30:04.090 に答える