- - PR -
window.openするとセッションが切れてしまいます
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-12-19 13:25
初めて投稿します。
現在javaとHTMLによる開発を行っているのですが、jsp内にてjavascriptのwindow.openを 行って新しい画面を開くとセッションが切れてしまうという現象が起きてしまいました。 ただし全てのクライアントで起こる現象ではなく、一部のクライアントに限定されています。 現象が起きたクライアントは WinXPHome IE6SP1 Win2000ProSP3 IE6SP1 です。 ただし同じOS、IEのクライアントでも現象の起こらないものもあります。 サーバの設定も疑ったのですが、必ずしも起きる現象でないので原因がどこにあるのかが 特定できません。 サーバ Win2000Ser Apache Tomcat/4.1.24-LE-jdk14 JVM 1.4.1_02-b06 原因の特定方法、回避方法、どちらでもかまいませんのでご存知の方がいらっしゃいましたら よろしくお願いします。 | ||||
|
投稿日時: 2003-12-19 14:38
はじめまして。
僕も以前、全く同じ現象を体験しました。 そのときいろいろ調べた結果ブラウザーのキャッシュが 悪さをしているようでした。 ブラウザーのキャッシュを削除しても解消されませんか? 見当違いだったらすいません。 | ||||
|
投稿日時: 2003-12-19 14:57
ありがとうございます。
早速試してみたのですが、残念なことに変化はありませんでした。 ボタンのクリックでjavasicriptを呼び出し、window.openで新しいウィンドウを開き Servletを呼びます。 一回目はセッションIDも取れ、表示もされるのですが、その画面を閉じ、もう一度開こうと 思うとセッションが切れてしまっていてBeansで保持してきた値を呼ぶことができません。 (セッションIDは変わってしまっています) getAttribute、setAttributeはきちんとしています。 ひとつ気になることにこのとき他のウィンドウ(yahooなど完全に違うページ)を開いていると この現象は起きません。 どのような事でもかまいませんので何かご意見などありましたらよろしくお願いします。 ================================================== すみません、補足です。 その後のテストでセッションが切れるタイミングはwindow.openした時ではなく、 開かれたウィンドウを閉じたときのようであるという事がわかりました。 ただし開いた子ウィンドウ(ウィンドウA)から更に子ウィンドウを開いた場合、子ウィンドウを閉じてもセッションは切れることなく、最初に開いたウィンドウAを閉じた時にセッションが切れているようです。 ウィンドウを閉じる時に特別な処理などは一切していません。 今の所そこまで何とかたどり着くことができました。 子ウィンドウを閉じると元のセッションが切れてしまうというのはウィンドウの制御に問題が あるのでしょうか? [ メッセージ編集済み 編集者: とまちゅぅ 編集日時 2003-12-19 18:43 ] | ||||
|
投稿日時: 2003-12-20 21:54
お世話になっております。
私が使用しているIBM WebsphereApplicationServer3,5.Xでは、 request.getSession()を行った際に、 「同一クライアントからのアクセスでも、1回目のgetSession()と2回目のgetSession()とで異なるIDを返すことがある」 という現象が発生します(^^;; Cookieの内容を追跡していると、2回目のアクセスでSessionIdが変化していることが多々(それ以降は同一のID)。 なぜこのような現象が発生するのかは不明ですが、IBMのWAS関係の資料の中でそういう注意事項を見かけたことがあります。 なので、実際にセッション維持が必要となる処理の前に、 1回追加でgetSession()を行うように制御して回避しています。 Tomcatは使用したことがないのでなんともいえないのですが、ご参考までに。 #とはいえ、こんな現象が発生するAPサーバも少ないとは思いますが・・・。 | ||||
|
投稿日時: 2003-12-24 12:05
syoさんありがとうございます。
そこでひとつ質問なのですが、 >1回追加でgetSession()を行うように制御して回避しています。 というのはgetSession()を2度連続して行うと言う事なのでしょうか? とりあえず、2度連続&関数の最初と処理の最初の2パターンで試してみたのですが 結果は変わりませんでした。 IEでセッションが破棄されてしまっているのであれば回避できないですよねぇ。。。? 未だ回避策を模索中ですがかなり難航しています。。。 | ||||
|
投稿日時: 2003-12-28 22:13
画面構成の内容にもよりますが、私の場合は、 1.「ログイン画面はこちら」の案内画面 2.ログイン画面(ID・パスワード入力画面) の2箇所でgetSession()を行うようにしています。 で、ユーザーには、「1」の画面のURLを案内し、その画面自体もindex.htmlなどではなくServlet経由でのjspを作成しております。 ただ、とまちゅぅさんの場合はこれが原因ではないような感じですね。 あと、ブラウザによっては「開いている全てのウィンドウで共通のセッション」になるか「開き方によって同じセッションになったり異なるセッションになったりする」という違いがあるので、もしかするとそのあたりが影響しているのかもしれません。 JavaScriptで開いた場合はどうなるのかは試していませんが、 IE6.0SP2の場合、ctrl+Nで新しいウィンドウを開いた場合は元のウィンドウと同じセッション、IEへのショートカットで新しいウィンドウを開いた場合は異なるセッションになりました。 | ||||
|
投稿日時: 2004-01-09 18:57
遅くなりましたが。。。
ウィンドウの開き方ですか。。。 思ってもみませんでしたが、今回はjavascriptのwindow.openで開いたウィンドウ のみが対象となっています。 でも、今まで全く気づかなかった所なのでそちらももう一度、チェックしてみようと 思います。 残念ながら今の所この問題の解決方法は見つかっておりません。 ただ、サーバによって起こらないものもあるようなので、サーバの設定や バージョン、クライアントの設定など色々な方向から再度検証してみようと思っています。 解決することができましたら再度報告させて頂きます。 ありがとうございました。 | ||||
|
投稿日時: 2004-01-09 19:20
BEA のデータベースにこんなのが登録されてます。
・[WLS 7.0 SP3 - HttpSession on the server side gets lost if a new window is opened and closed using java script within Internet Explorer.] http://support.bea.com/application?namespace=askbea&origin=ask_bea_answer.jsp&event=link.view_answer_page_clfydoc&answerpage=solution&page=wls%2FS-20752.htm WebLogic の問題ではなくて、どうも IE のバグみたいですが、これとは関係ないでしょうか? ・[マイクロソフト サポート技術情報 - 300895]-[BUG: Session ID Lost When New Window Opened] http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q300/8/95.ASP&%3bNoWebContent=1 | ||||
