IIS5.0+ASPで動いているWebアプリケーションがあるのですが、エクスプローラで開いた場合、ポップアップしたウィンドウにsessionが引き継がれずに困っています。
http://www.hatena.ne.jp/1134557325#
人力検索はてな - Webページを表示するために、IEを普通の方法で起動し表示した場合と(ファイルを表示する)エクスプローラのアドレスバーにURLを入力して起動した場合の違いは何でしょうか..
IEではセッションはIEのプロセスごとに管理されています。
たとえば、セッションを使っているWebアプリケーションにおいて1台のマシーンで2つのIEを起動し一つは画面遷移してとあるURLにたどりつき、その後もう一つのIEでURLを直接入力したのではセッションは引き継がれません。
ポップアップした場合は同一プロセスでIEが動いているはずなのでセッションは引き継がれても良さそうですけど……。セッションのスコープに問題があることは考えられますけど。
別プロセスで動いていましたか。
さて、代替の方法ですがどのようなものを作っているか皆目見当がつかないのではずしていたらごめんなさい。
一つの方法としてクエリーストリングとして情報を与えてあげる。いわゆる、GETコマンドですね。最低、キーとなっている情報を与えることができればいいでしょう。
オブジェクトを渡す必要があるのならお手上げですが。
方法論はわかりませんがセッションIDを渡してあげてセッションを横取りしてしまう方法。ただし、第三者によるセッションハイジャックの懸念がありセキュリティ上大きな問題ありです。
どうしても、セッションを引き継がなければならない致命的な理由がなければGETコマンドで逃げることができるかと思います。その場合でもURL文字列にいろいろと情報が載ってくることになります。
尚、2回までしか回答ができないようですのでこの回答のコメントにより気付いたことがあれば自分の日記にこの質問にトラックバックする形で書きます。
やっぱり、そういう手順ですかね。
sessionオブジェクトでは大したデータ扱ってなかったので、applicationオブジェクトと自前で管理したcookie使って自力でセッション管理するように変更しました。
回答文の「同一プロセス」の単語にピンと来て、タスクマネージャでプロセスの変化を見てみたら、エクスプローラの場合は親ウィンドウがexplorer.exeで、ポップアップを表示すると別プロセスのIEXPLORE.EXEを起動してる様です。これだよ(笑)。気付かせてくれてありがとうございました。
で、なにかうまい方法は有りませんか?