- PR -

画面遷移でセッションが切れる

1
投稿者投稿内容
せぶん
会議室デビュー日: 2004/08/17
投稿数: 3
投稿日時: 2004-08-17 14:49
はじめまして佐藤と申します。
java暦は4年程になります。よろしくお願いします。

現在原因不明の現象がでていまして、同じような現象がでた!若しくは、
でたが解決した!!と言う方がいましたら、ご教授願います。

まず、現象を簡単に説明しますと。画面遷移時にセッションが切れてしまいます。
request.getSession()でセッションを取得すると、クッキーでIDを保持しているにも
関わらず
画面遷移時に新しいセッションが取得されてしまうのです。
画面遷移を簡単に説明しますと、「ローカル1⇒他サーバー⇒ローカル2」と言った
感じです。
切れるタイミングとしましては、他サーバ⇒ローカル2のタイミングで、他サーバー
から処理が帰ってくるところです。
ほとんどの環境ではこの現象は再現しません。
また、ある環境では、ローカル1⇒ローカル2と言った遷移でもセッションが切れま
す。

WIN2000、5.002195 ServicePack4、ブラウザはIE 6.0.2800.1106、
j2sdk1.4.2_05を使用しています。
同じブラウザでもPCによってはセッションは切れませんでした。
サーバーはjboss-3.2.5を使用しています。

初めは、ブラウザだろうと睨んでいたのですが、同じversionのIEでも
現象が再現しないPCは再現しません。
Netscape 7.1 を使用しても同じ現象が起きます。
どうやらPC?OS?に問題があるように思えます。

宜しくお願い致します。

 佐藤
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2004-08-17 17:00
引用:

せぶんさんの書き込み (2004-08-17 14:49) より:

画面遷移を簡単に説明しますと、「ローカル1⇒他サーバー⇒ローカル2」と言った
感じです。
切れるタイミングとしましては、他サーバ⇒ローカル2のタイミングで、他サーバー
から処理が帰ってくるところです。
ほとんどの環境ではこの現象は再現しません。
また、ある環境では、ローカル1⇒ローカル2と言った遷移でもセッションが切れま
す。




上の意味がちょっと分かりません。
まず、「ローカル1」「ローカル2」とは何でしょう?
ローカルのHTMLファイルからサーバのHTMLにリンクしているのでしょうか?
でもそうすると、『ローカル1⇒ローカル2』の意味が通じなくなるなぁ…
(ローカルのHTMLの遷移でセションも何もないでしょうし。。。)

とりあえず、あてずっぽうで以下は関係あるでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;ja;JP315713

せぶん
会議室デビュー日: 2004/08/17
投稿数: 3
投稿日時: 2004-08-17 18:28
レス有難うございます。佐藤です。
表現が不適切でした。すいません。
記述しなおします。

「サーバー1でA.jspを表示⇒サーバー2でB.jspを表示⇒サーバー1でC.jspを表示」
下記のような遷移をし、HTMLではなく全てjspを使用しています。

サーバー1でservlet処理@。(新規にsession作成)

サーバー1でA.jspA

サーバー2でservletB

サーバー2でB.jspC

サーバー1でservletD。(@で作成したsessionが切れているので、新規にsessionを作成)

サーバー1でC.jspE

@で取得したsessionがDで切れて新しいsessionを作成しています。

また、上記の問題に関連する現象なのですが、、
「サーバー1でA.jspを表示⇒サーバー2でB.jspを表示⇒サーバー1でC.jspを表示」一回目
を処理しし同じブラウザで再び
「サーバー1でA.jspを表示⇒サーバー2でB.jspを表示⇒サーバー1でC.jspを表示」二回目
を実行するしサーバ1でC.jspを表示すると一回目のDで新規に作成されたsessionが取得できてしまうのです。

まったく、わけがわかりません。。。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-17 19:01
まず、ブラウザが期待通りにクッキーを受け取っているか、送っているか確認するためにパケットキャプチャをして切り分けてみてはいかがでしょうか。
・Packetyzer
http://www.networkchemistry.com/products/packetyzer/
・Ethereal
http://www.ethereal.com/
せぶん
会議室デビュー日: 2004/08/17
投稿数: 3
投稿日時: 2004-08-18 16:56
レス有難うございます。佐藤です。
インギさんの提案を元にパケットをキャプチャしようとしていたのですが、解決しました。

同一サーバ内で仮想のサーバ1とサーバ2を立て、内部的にアクセスを行っていたのが、原因でした。Apacheの設定で、サーバ1から一度外へ出て、サーバ2へアクセスするようした所、解決しました。
内部的にリクエストを飛ばしていたので、同一のクッキーにsessionidが保存されて不正な動作をしていたように思えます。
リクエストを外部経由にすることによってsessionidを保存するクッキーが別になったのだろうと思います。

ディレクトリCookies配下にファイルが作成されていないので、ハマッテしまいました。
request.getSession()でSessionを取得していても、ファイルは作成されないんですねぇ。
メモリ上に持ってるんでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-19 00:22
多くの場合セッションのクッキーの賞味期限は「セッションの終わり=ブラウザを閉じるまで」になっていますね。
セッションIDの変わり目とかを知りたい場合はブラウザでクッキー受信時にダイアログをだすか、パケットキャプチャを行うことで見えます。
1

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