2009-03-24 32 views
1

現在、window.openで新しいaspxページを開いています。 window.openはasp.netハイパーリンクコントロールをクリックすると呼び出される現在のaspxページのjavascript関数(openNewWindow())にあります。window.openで開いたウィンドウの終了後にセッションの状態が失われる

リンクはGoogleのフレームワークによってページ上に動的に作成されるため、その機能を変更しないようにしたいと考えています。

この新しい「子」ウィ​​ンドウが閉じられると、セッション状態が失われることが問題です。子ウィンドウが閉じられた後に、セッションが子ウィンドウ内でのみ使用可能であると言及する必要があります。

私たちのアプリケーションでは、ハイパーリンクコントロールのcodebehind clickイベントでClientScriptManager.RegisterStartupScript呼び出しを使用してopen.window呼び出しをページに追加したように見えます。 aspxでコード化されている)セッションは保存されます。

現在のフレームワークコードでは、後者のソリューションは大きな変更やすべての回帰テストを伴わずに実装するのが難しいでしょう。

子ウィンドウの終了後にセッション状態を生かしておく方法は誰にも分かりません。

これはIE7で発生しており、私たちのアプリはasp.net 2.0ベースです。

この問題に対する洞察力と洗練されたソリューションをお寄せいただきありがとうございます。 ; O)

+0

まず、Session.OnEndイベントハンドラをglobal.asaxに追加して、これが実際に起こっているかどうかを確認してください... – annakata

+0

(あなたがカスタムセッションモードではないと仮定します - あなたのセッションクッキーもベースですか? – annakata

答えて

0

編集:おっと - 申し訳ありませんが、私の答えの代わりに、コメント

をクリックして、それが断続的ですが、私は答えを持っていないことを申し訳ありませんが、私は同様の問題を経験していますし、私はそれをうまく複製できません。

新しいブラウザウィンドウを開いた後に、ログインページにリダイレクトされる顧客がいます。プリンタフレンドリなページ、ダイナミックリンクの場合です。ターゲットが_blankに設定されたリンクを使用している場合に発生します。私は実際にこのアプリケーションをビルドするときに私のワークステーションで数回は起こったが、それ以来それを複製することはできなかった。

誰かが洞察力を提供することができます/これを解決します。

0

私は自分自身を修正する必要があります(申し訳ありません、元の質問を編集することはできません) 'window.open'を実行するjavascriptを起動するコントロールはハイパーリンクではなくリンクボタンです。

1

IE 7は新しいウィンドウの動作を変更しました。基本的には、各ウィンドウはそれ自身のプロセスで開かれます。タブは同じプロセスで開かれたままです。

これは、新しいウィンドウごとに独自のクッキーバッグを持つことを意味します。つまり、新しいウィンドウにはSesssion_IDクッキーが自動的に割り当てられません。 .Netリンクコントロールは新しいウィンドウにクッキーを送信します。しかし、ちょうど真っ直ぐなjavascriptで新しいウィンドウを開くことはおそらくそれをしません。

FireFoxはこの方法でしばらくお待ちしており、Chromeはいつもこのようにしてきたと私は信じています。 IE 6と以前の共有プロセス空間、複数のウィンドウであってもすべてが2つの間で共有されていたため、IEで厳密にサイトをデバッグするための頭痛の原因にはなりませんでした。詳細に問題を説明

UPDATE
Here's a link。この動作はやや矛盾しています。その理由は、時にはIE 7が独自のプロセスで新しいウィンドウを開くことを決定し、時にはそれを新しいウィンドウで開くことがあるからです。

実際の解決策は2つあります。セッションに完全に頼るのを止めてください(私の最初の選択ですが、これには強力な技術的理由があります)、またはクッキーのないセッションに切り替える必要があります。

関連する問題