- PR -

Strutsでセッションが増え続ける謎・・・

投稿者投稿内容
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-03-31 20:41
こんばんわ。
Struts1.1+Tomcat4.1.24でWEBアプリを作っています。

ActionでSessionをつくり、JSPページへフォワードする
ごくごく単純な構成です。

Actionに
HttpSession session = request.getSession();
と記述し、このページをリロードして、
Tomcatのmanagerアプリから見てみると
なんと!
セッションカウントが増え続けているのです。。。。

コード的にはどうしようもないので、
web.xmlかstruts-confing.xmlの問題かもしれませんが、
みなさん、このような経験ありますか?

ためしに session.getId() を outしてみたところ、
毎回、IDが違っていました。
これじゃつかえないよ・・・・・(;_;)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-31 21:20
ブラウザがクッキーを受け付けないように設定されているということはないでしょうか?
あと、「Strutsで」というタイトルになっていますが、Strutsと組み合わせたときだけの話ですか?
切り分けのために Struts を使わないでどうなるか、ブラウザのクッキーの設定を変えるとどうなるかお試しいただくことをお勧めします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-03-31 23:38
インギさん、レスありがとうございます。
普通のdoGet, doPostを使っているサーブレットは
上手くセッションを使えています。

調べたところ、ActionServletが request.getSession()を
呼んでいるようなんですよね。(ソースまでみてませんが・・)

また、Cookieは有効です。
他のサーブレットでは全く正常に動いています。

ためしに
ActionServletを継承したサンプルを作ってみました。

Session session = request.getSession();
System.out.println(session.getId());

return null;

この3行だけなのですが、
やはり、セッションカウントはあがっており
プリントされるIDも全部違っているんですよ。。。

config系の問題もしくはTomcatのバージョンの問題なのかな・・・

request.getSession(false)とするべきかと思いましたが、
J2EE仕様的に 引数なしはなければ、つくる。あれば、使うですので。。。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-04-01 15:41
HTTP レスポンス時の JSESSIONID クッキーの値と、
その次のリクエスト時に付いている JSESSIONID クッキー
の値はどうなっているでしょうか。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-04-01 15:59
はしもとさんこんにちは。

リクエスト毎にSESSION_IDが違っているんです。
とくに invalidate() とかしていなんですけども。。

struts-config.xmlにの<init-param>に
debug 3 と
detail 3 というものがありました。

たぶん、関係ないですよね。これ・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-01 17:46
もう少し切り分けてみてはいかがでしょうか?
Struts1.1+Tomcat4.1.24 でSturts のサンプルアプリケーションを動かした場合はそのような現象は起きないですよね?
起きるのであれば素の状態の Tomcat なり Struts を疑いますが、起きないのであれば、いま開発中のアプリケーションとの違いを見つければいいはずです。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-04-01 18:05
インギさん、レスありがとうございます。
そうですね。
strutsを再度DLし、サンプルとの違いを比べてみました。

違った点は
web.xml の ActionServet の定義部分で
<init-param>がないのみでした。

前回のプロジェクトで使ったweb.xmlを参考にしており、
ActionServletの部分はほぼコピーされておりました。

また、<init-param>を使用する用途は
今回のプロジェクトでは全くないため、
その部分を削除しました。

削除して再起動してみましたところ、
セッションカウントが増えることがなくなりました。

<init-param>debug</init-param>
<value>3</value>

<init-param>detail</init-param>
<value>3</value>

この記述が悪さをしていたのかどうかは
わかりませんが、うまく動くようになりました。

以上ご報告です。。。。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-04-05 15:42
ダメでした・・・・
わかった要因として、
開いたばかりの新しいブラウザならば、
セッションIDがリクエストとレスポンスで一致し、正常に使えますが、
ブラウザを使っていくと(色んなWEBページを見たブラウザ)
セッションIDがリクエストとレスポンスで一致せず、
毎回、セッションIDが変化し、サーバ側のセッション数が増加します。

使用ブラウザはIE6.0 SP1 なのですが、
ブラウザがこんな問題起こすわけないですよね。。。

ちなみに、セッション数が増加しだすと、
IEのキャッシュをクリアして、新しいブラウザを開くと動きます。。。。>_<

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