「実際にコードを書いて試したところ、ひょんなことで解決策が見えてきた」
「それはなんだい?」
「我々が欲しいのはセッションオブジェクトのストアではない。単純にセッションを識別するIDだけであると割り切ってみよう。IDを使って何をどこから取得するかは個々のページの問題だ」
「割り切ると何が解決策があったの?」
「偶然気づいてしまった」
「なにに?」
「何もしないで実行するとページがへんかするごとにSessionIDの値はどんどん変化していく」
「うん」
「ところが、以下の行をglobal.asaxに追加するとそれだけで変化しなくなった」
void Session_OnStart()
{
// Session start-up code goes here.
}
void Session_OnEnd()
{
// Session clean-up code goes here.
}
「セッション管理の設定は?」
「インプロセスのまま」
<sessionState mode="InProc"></sessionState>
「それで複数インスタンスにするとどうなるの?」
「それでもたった1つのSessionIDを示し続けたよ」
「まとめるとどうなる?」
- セッションの識別IDが欲しいだけなら、実はセッションの問題は急に簡単になる
- 複数インスタンスのAzure環境であっても、IDが欲しいだけなら特別なセッション管理システムは要らない
「でもおかしいじゃないか。ならばそのIDはいったいどこに保管されているんだよ。インスタンスを超えて共有されるのに、どのDBにも保管されていないんだろう?」
「クッキーに保管されているから、Webブラウザが同じならサーバ側のインスタンスが違っていても共有される」