- PR -

セッション

投稿者投稿内容
NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2004-07-07 11:54
Javaは素人で本の知識だけで初歩的質問ですが、Javaはセッションタイムアウトが発生してもサーバーサイドのスレッドは死なないと何処かで見た様な気がしたのですが?

今、セッションタイムアウトが発生した場合にそれを通知する共通で用いられる障害表示画面があり、確認応答後にログイン画面へ戻る様に成っています。

今回、新システムができ、独自のログイン画面が出来てしまったため障害表示画面で確認応答後にどのログイン画面へ戻るか判定する必要が出来ました。

実行時、どの処理が動いているかを識別する情報がSESSIONに書き込まれているのですが、セッションタイムアウトが発生した場合には解放され取得できなくなるのでしょうか?

また、解放されるとしたら何がタイムアウトに成ったか識別する方法は有りますか?

Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-07 12:03
1.SessionTimeout後に、そのSessionコンテキストに格納されているオブジェクトを取得することはできません。
2.SessionTimeout時に、Servletコンテキストに格納すれば、残すことができます。
SessionTimeoutのイベントは、HttpSessionListenerを使えば取得できます。
(ServletコンテキストはServletで1つしかないことに注意してください)

NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2004-07-07 12:47
早々、ご解答有難う御座いました。

まだ、具体的にどうコーディングすれば良いかは判っていませんが、勉強しながら改修作業に入って見ます。

NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2004-07-08 09:50
済みません。試してみれば良いのでしょうが作業環境も無く改修計画を練っている最中でして、また、お知恵を拝借したいのですがよろしくお願いいたします。

>1.SessionTimeout後に、そのSessionコンテキストに格納されているオブジェクトを取得することはできません。
>2.SessionTimeout時に、Servletコンテキストに格納すれば、残すことができます。
>SessionTimeoutのイベントは、HttpSessionListenerを使えば取得できます。
>(ServletコンテキストはServletで1つしかないことに注意してください)

質問に上げたタイムアウトの画面以外に数画面、共通のものがあります。

これらの画面はフレームワークの配下で動いています。従って、Clusterさんから指摘を受けた様にServletコンテキストは一つしか無さそうです。

従って、属性名にセッションIDをプラスして、識別コードを格納しようと思ったのですがタイムアウト時にはセッションIDが取れなさそうですからプラスして見に行けそうも無いと思われます。

何か良い方法が有ればご教授願います。

なお、SessionTimeoutのイベント(HttpSessionListener)が発生した時点ではセッションIDはまだ取得できる状態でしょうか?

以上
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-07-08 10:25
>なお、SessionTimeoutのイベント(HttpSessionListener)が発生した時点ではセッションIDはまだ取得
>できる状態でしょうか?
API ドキュメントや仕様書を参照しましょう。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-07-08 13:03
引用:

Clusterさんの書き込み (2004-07-07 12:03) より:
1.SessionTimeout後に、そのSessionコンテキストに格納されているオブジェクトを取得することはできません。
2.SessionTimeout時に、Servletコンテキストに格納すれば、残すことができます。
SessionTimeoutのイベントは、HttpSessionListenerを使えば取得できます。
(ServletコンテキストはServletで1つしかないことに注意してください)



ごめんなさい、ちょっと疑問なんですが
この2.ってListenerでは生きているsessionオブジェクト
を拾ってこれないですよね?

どうやら、ログインのための識別子はsessionに入っている
みたいなんで、これだとむりなのかなぁと思いました。

私なんか勘違いしてますかね?
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-08 13:47
引用:

(株)ぽちさんの書き込み (2004-07-08 13:03) より:

ごめんなさい、ちょっと疑問なんですが
この2.ってListenerでは生きているsessionオブジェクト
を拾ってこれないですよね?




あれ?そうなんですか?(自分では試してなかった
てっきり、HttpSessionEvent#getSession()で取ってこれると思ってたんですが。

・・・ちょっと調べてみたら、こんな投稿がありました。
APサーバー依存なんですかねぇ?
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-08 14:23
どうも、Servlet 2.4から仕様が変わったらしいです。

引用:

Java Servlet Specification Version 2.4より抜粋

SRV.1.6 Compatibility with Java Servlet Specification Version 2.3

SRV.1.6.1 HttpSessionListener.sessionDestroyed

In the previous versions of the specification, this method was defined as:
Notification that a session was invalidated.
As of Version 2.4, this method is changed to:
Notification that a session is about to be invalidated
so that it notifies before the session invalidation. If the code assumed the previous behavior, it must be modified to match the new behavior.

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