- PR -

HttpSession#isNew()メソッドの利用方法について

投稿者投稿内容
たろー
会議室デビュー日: 2004/12/21
投稿数: 11
投稿日時: 2004-12-21 21:47
はじめまして。
サーブレット開発、初心者です。
HttpSession#isNew()メソッドを利用して、セションの開始時期を明確にしたいのですが、ほぼ全てfalseが返ってきます。
ブラウザを立ち上げなおしたり、サーブレットコンテナを立ち上げなおしたりしていますが、現象は変わりません。
セション開始時期を明確にする方法(isNew()メソッドではなくて)が間違っているのか、開発環境のセション管理に不備があるのか、判断がつきません。
知っていましたら、ご教授いただけないでしょうか??

開発環境は以下のとおりです。
eclipse 3.0
Tomcat5.0
JDK1.4
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2004-12-21 22:06
isNew() 実行前にすでに session オブジェクトが作られているってことはないですか?
Servlet の前に filter をかましてあげるとどうでしょうか?
開始時間をとりたいだけなら、getCreationTime() で取れそうですが。
たろー
会議室デビュー日: 2004/12/21
投稿数: 11
投稿日時: 2004-12-21 22:14
早速のご返答ありがとうございます。
>isNew() 実行前にすでに session オブジェクトが作られているってことはないですか?
request.getSession(false);の記述でsessionがnullではないので、実行前にsessionオブジェクトが作られていると思います。
ブラウザを閉じたり、コンテナを再起動しても残っているような状態なのですが。。。
明示的にセションを無効に(invalidate()メソッド)しないといけないでしょうか??

>Servlet の前に filter をかましてあげるとどうでしょうか?
すみません。filterというとどのようなクラスを利用して、実装するのでしょうか??

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-12-22 06:59
当該サーブレットが実行される前にどこかでセッションが生成されているのでしょうね。
まずは index.jsp みたいなところで isNew() で true が返るかどうか試してみてはいかがでしょう。

>すみません。filterというとどのようなクラスを利用して、実装するのでしょうか??
javax.servlet.Filter です。

>明示的にセションを無効に(invalidate()メソッド)しないといけないでしょうか??
まずセッション管理がどのように行われているか勉強してみましょう。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-12-22 10:07
HttpSessionListenerでセッションの生成イベントを
拾えばいつ生成されているか見当がつかないでしょうか?

# 余談ですが、とあるフレームワークでは知らないところで勝手に
# セッションを作ってしまうものもありました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-22 10:52
引用:

サーブレットコンテナを立ち上げなおしたり



Tomcatって、シャットダウンするときに、
Sessionを直列化して、起動時に復元しませんでしたっけ?
たろー
会議室デビュー日: 2004/12/21
投稿数: 11
投稿日時: 2004-12-25 17:29
返事が遅くなりすみません。

初回アクセス時(ログイン)をJSPに指定すると、その時点でセションが生成されるのが分かりました。なので、ログイン画面はhtmlへ切り替える方向です。
HTMLアクセス→サーブレットコンテナ(新規セション)→サーブレットクラス

たくさんのアドバイスありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-12-25 17:38
JSP は暗黙オブジェクト - session を使えるようにするためデフォルトでセッションが勝手に作成されます。
これを抑止したい場合は page ディレクティブで session="false" って指定すれば Ok ですので html と置き換えなくても大丈夫かもしれません。
セッション作成時の処理を行いたいのであればサーブレットで isNew() 判断して行うよりも HttpSessionListener で行う方が簡単/確実かと思います。
確実にセッション生成のタイミングをつかめますので。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSessionListener.html

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