- PR -

SessionStateについて

1
投稿者投稿内容
Gun
常連さん
会議室デビュー日: 2005/01/24
投稿数: 23
投稿日時: 2005-02-09 16:21
いつも大変に参考にさせていただいております。

以下の記事を参考にし、SessionStateのテストを行っております。
http://www.atmarkit.co.jp/fdotnet/entwebapp/entwebapp06/entwebapp06_01.html
http://www.atmarkit.co.jp/fdotnet/entwebapp/entwebapp06/entwebapp06_02.jpg

構成としては、jpg画像のように、WindowsのNLB配下にWebサーバーを2台立てております。
その他にStateServerがある状態です。

まずは、2台のWebサーバーのweb.configをInProcからStateServerへ変更しました。
Webサーバー1にて、Sesssion.Add("State1","Webサーバー1にて発行")を行い、
NLBからWebサーバー1を外し(偽障害状態を作る)、Webサーバー2へ振ります。
そのWebサーバー2でSession.Item("State1")を参照しても何も格納されておりません。

そこでもうちょっとわかりやすいように、各ページにSessionIDを表示するようにしました。
上述の手順を踏んでもSessionIDには変化はありません。

さらにもうちょっと詳しく内容を見るために、StateServer管理ではなく、
SQLServer管理に変更しました。
(もちろん、また2台のWebサーバーのWeb.configを書き換えました。)

そこで上述の処理を行ったところ、Webサーバー2でSession.Item("State1")を
参照することは同じく出来ませんでした。

が、ASPStateTempSessions.sessionidには、
(共通のSessionID:24バイト)と(8バイトの異なる文字列)でなる32バイト文字列
のレコードが2つ挿入されておりました。

(8バイトの異なる文字列)←これが原因で2台のWebサーバーで
Sessionが共有できないのかと推測しております。
実験を重ねてもSessionIDは都度変化しますが、8バイトの部分はWebサーバーが2台なせいか、
2パターンのみで変化がありません。(うまく伝わっているか自信ないですが…。)
これがクリアになれば、StateServerでもSQLServerでも動作するのではないかと思うのですが…。

他の記事で、Machine.configの【machineKey】が一致していないと同一とみなさない、
とあったので、それも試しましたが、NGでした。

他に何か心当たりはございませんでしょうか。
そもそも根本的に技術の理解を勘違いしているようなら、そちらもご指摘ください。

どうぞよろしくお願い申し上げます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-09 22:48
 MSDNを読んでいてふと思ったのですが、アプリケーションエリアを独立させるおまじないを追加していませんか?machineKeyの設定内容が出せるなら、出していただけるとわかるかもしれません。
_________________
Gun
常連さん
会議室デビュー日: 2005/01/24
投稿数: 23
投稿日時: 2005-02-10 10:33
Jittaさん

アドバイスありがとうございます。
大変申し訳ございませんが、いろいろ調べたものの、どこのことをおっしゃっているのか、
理解できませんでした。

よろしければ、もう少し具体的にご教授いただけませんでしょうか。

ちなみに経過を申し上げます。
Webサーバー1で発行される8バイトの異なる文字列を
Webサーバー2で発行される8バイトの異なる文字列に置換した後に、
Webサーバー1をNLBからはずし、Webサーバー2へ振ると予定していた挙動になります。

この8バイトはどこから来るのか今も調査中です。

以上です。

どうぞよろしくお願い申し上げます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-10 21:14
 MSDNを「セッション状態」でキーワード検索し、「セッション状態」をクリックすると「キーワード検索の結果」に「セッション状態」というトピックがあるので、これを開きます。<machinekey>が同じでなければ云々は、ここに書かれていますね。
引用:

フェール オーバー クラスタを構成するには、各 Web サーバーの Web.config ファイル内の <machinekey> 要素を同じ値に設定します。



一通り目を通すと、<machinekey>がリンクになっているので、クリックします。
引用:

<machineKey validationKey="AutoGenerate|value[,IsolateApps]"
decryptionKey="AutoGenerate|value[,IsolateApps]"
validation="SHA1|MD5|3DES"/>


これですね。validationKeyは、"AutoGenerate"という値か、自分で指定する値、および"IsolateApps"というオプションを受け取ります。この"IsolateApps"を指定すると、
引用:

ASP.NET は各アプリケーションのアプリケーション ID を使用して、一意の暗号化されたキーをアプリケーションごとに生成します。


 これを指定していませんか?

_________________
Gun
常連さん
会議室デビュー日: 2005/01/24
投稿数: 23
投稿日時: 2005-02-14 09:51
Jittaさん

ご返信ありがとうございます。

引用:

validationKeyは、"AutoGenerate"という値か、自分で指定する値、
および"IsolateApps"というオプションを受け取ります。
この"IsolateApps"を指定すると、ASP.NET は各アプリケーションの
アプリケーション ID を使用して、一意の暗号化されたキーをアプリケーションごとに生成します。 これを指定していませんか?



はい、上述の件、全て満たしております。
validationKeyはAutoGenerateではなく、新たに生成したコードとなっております。
"IsolateApps"こちらの指定も行っておりません。ちなみに念のため、入れても試しましたが、
変化はございません。

もし、他に何かご指摘できることがあれば、どうぞよろしくお願い申し上げます。
1

スキルアップ/キャリアアップ(JOB@IT)