- - PR -
サーバリクエスト中のセッション維持方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-11 16:18
【現状】
下記システムを構築しています。(大まかですが) DBサーバ | APサーバ(jakarta-tomcat-4.1.30) | Webサーバ(apache_2.0.49) プログラム開発環境は下記です。 jave:j2sdk-1_4_2_05 フレームワーク:jakarta-struts-1.1 【問題点】 クライアントはブラウザ(IE5.5以降)でインターネットを経由してWebサーバにアクセスします。 このとき、検索処理をリクエストするのですが、 検索処理中に3分経過したとき、セッションタイムアウトが発生してしまいます。 ・エンドユーザから接続した場合、3分無通信でタイムアウトになる。 ・弊方から接続した場合3分無通信でもタイムアウトにならない。 この2点からAPサーバ、Webサーバのタイムアウト設定に起因するものでは無く、 客先のプロキシ(ファイアウォール)で切断されていると考えています。 【質問事項】 そこで、検索処理中にAPサーバからクライアントに対し、キープアライブのようなレスポンスを定期的に返すことで セッションタイムアウトを回避できないかと検討しているのですが、良い解決策が見つからない状況です。 何か良い案がございましたらご教示頂けますでしょうか。 | ||||
|
投稿日時: 2005-11-11 16:28
こういうことって無理っぽい気がします。 httpの仕様云々とかあるんですが、私はあまり詳しくないので、 有識者の方々のフォローなんかいただけると...(^^;; 現実的な対応としては、”検索に3分もかけるな!”になるかと思うので、 DB検索を見直す(SQL等)、一度に結果を表示せず、ページャーなどで分けて表示する、 とかいった解決策が、より現実的な気がします。 | ||||
|
投稿日時: 2005-11-11 16:56
検索処理をいったん別スレッドにて行わせて、クライアントに対し定期的に終了をページリフレッシュなどを利用して終了を問い合わさせるのがいいと思います。
| ||||
|
投稿日時: 2005-11-11 18:04
セッションタイムアウトとはKeepAliveのコネクションが切断されることではなく、HttpSession のタイムアウトが発生しているという認識でよいでしょうか?
HttpSession はCookie や URL のパラメータで保持するものですのでファイアウォールやプロキシで切断されたり、タイムアウトが早まったりする性質のものではありません。 #特定のクッキーを削除したり、URL を書き換えたりする特殊なファイアウォールやプロキシがあるなら話は違ってきますが web.xml のセッションタイムアウトの設定はどうなっていますか? | ||||
|
投稿日時: 2005-11-12 00:02
ご意見ありがとうございます。
検索処理中は、ブラウザ側は待ちになりますよね。 3分経過すると画面がタイムアウトの旨を表すエラー画面になるんです。 そのエラー画面を見ると、 「ISAサーバー(Internet Security & Acceleration Server)が タイムアウトを検出しました。」 のような感じでメッセージが出てます。 だからプロキシで切断されてしまっているのではないかと思っています。 なお、Tomcatのタイムアウト設定はデフォルトの30分です。 | ||||
|
投稿日時: 2005-11-12 00:21
なるほど。
こんなの↓参考になるかもしれません。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7110&forum=12 | ||||
|
投稿日時: 2005-11-12 01:08
サーバからクライアントではなく、クライアントからサーバではいかがでしょう? JavascriptのsetTimeoutを使い、一定時間ごとにサーバに送ります。 (どこかに書いたような気が…) 私の場合、フレームとダミーのページを用意し、フレームを上下に分け、上のフレーム にダミーページ、下のフレームに本編のページを表示させています。そして、 ダミーのページの方にsetTimeoutを伴ったJavascriptを置いています。 xmlHttpRequestをうまく使うと、もっと綺麗にできるかもしれません。 | ||||
|
投稿日時: 2005-11-12 09:49
サーバサイドだけでなく、クライアントサイドからでもできそうな気がしてきました。 JSPの修正だけでできればベターですね。 とりあえず、下記スクリプトをJSPに追加して検証することにします。 もしダメだったらマルチスレッド化ですね、難しそうだけど・・・ 結果報告は月曜日になりそうですm(_ _)m ------------------------JSP------------------------ function keepSess(){ tID=setTimeout('keepSess2()',60000); ←サーバにリクエストする処理をタイマー起動 } <BODY onLoad="keepSess()" onUnload="clearTimeout(tID)"> |