質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

7957閲覧

java1.8&tomcat7のセッション有効期限について setMaxInactiveInterval

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2016/06/04 07:31

編集2016/06/04 08:08

以下のコードを記述し、sessionを常に保持したいですが、

HttpSession session = request.getSession(); session.setMaxInactiveInterval(-1);

上記をローカルmac/tomcat7で実装していますが、
1日たった後でmacを再起動しましたが、

コード中で、session.setAttribute("key", key);

したkeyが

session.getAttribute("key");

で取得できなくなります。

この原因は、tomcat セッションはデフォルトは、メモリに保持しているので、
macを再起動してしまう、または、tomcatを再起動してしまうと、
メモリから消えてしまい、セッションも消えてしまうになりますでしょうか。

また、セッションを切れなくするには、以下のようにファイルに保存する形で
よいでしょうか。

http://qiita.com/shintaness/items/73d176c0a4f369608898#2-2

何卒教えて頂ければ幸いです。

--追記--
context.xmlにある以下にて

<!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> -->

「Tomcat停止時にセッション状態をファイルに保存して、起動時に読み込んでセッションを永続化するようになってます」

という動作をするとのことなので、

少なくとも、tomcat起動、再起動では、セッション情報は消えないになりますかね。

だとしますと、私がmacを再起動したときに、
tomcatの停止しないまましたので、強制終了になり、セッションが保存されないままとなったため、
セッションがきえてしまったという現象になった?でしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

http://tomcat.apache.org/tomcat-6.0-doc/config/manager.html#Special_Features

Whenever Apache Tomcat is shut down normally and restarted, or when an application reload is triggered, the standard Manager implementation will attempt to serialize all currently active sessions to a disk file located via the pathname

とあります。"shut down normally"でなければ、セッションは永続化されないと読めますね。

投稿2016/06/13 18:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/14 01:32

ご回答ありがとうございます。 勉強になります。
guest

0

以下、記述誤りがありましたので訂正しました。

セッションの有効期限を -1 にした場合は、開いているブラウザが閉じられた瞬間に"ブラウザのクッキーが"破棄され、Tomcatのセッションオブジェクトそのものは破棄されません。

同一ブラウザで開いたときは同一のセッションクッキーが使われ、ブラウザを閉じたときは、ブラウザ側のクッキーが破棄されたので次は新しいセッションが発行されます
(つまりお調べになったとおり、セッションオブジェクトそのものは残ります)

なお、Tomcat停止→起動してもブラウザが残っている(ないしは同一のセッションIDでリクエストした)
ことに関しては、

<Manager pathname="" />

を有効にすると、Tomcatを停止した後はセッションはすべて破棄されます。つまりデフォルトの設定ではTomcatを再起動してもセッションオブジェクトは復活しようと試みます。

投稿2016/06/04 08:41

編集2016/06/05 15:37
A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/05 04:59

ご回答ありがとうございます。 1点下記教えていただいた部分について、 >セッションの有効期限を -1 にした場合は、開いているブラウザが閉じられた瞬間に破棄されます。 -1の場合、ブラウザが閉じられてもセッションは有効であると思いまして、 実際プログラムを動かしてみましたところ、セッションは有効でありました。 そうなりますと、、sessionを常に保持したい場合は、 setMaxInactiveInterval(-1);とする。 また、これまでを纏めますと、 (1)tomcat再起動でもセッションは生き残る (2)ブラウザ再起動でもセッションは生き残る (3)tomcatが乗っかているマシンを再起動する際、    tomcatを停止してから再起動をしていれば、セッションの復帰できるが、    tomcatを停止せずに再起動すると、セッションが保存されずにきえてしまう場合がある。 になる理解でよいでしょうか。
退会済みユーザー

退会済みユーザー

2016/06/06 02:55

ご回答ありがとうございます。 となりますと、すみません、以下認識だけあっていますでしょうか。 sessionを常に保持したい場合は、setMaxInactiveInterval(-1);として、 (1)tomcat再起動でもセッションは生き残る (2)ブラウザ再起動でもセッションは生き残る (3)tomcatが乗っかているマシンを再起動する際、    tomcatを停止してから再起動をしていれば、セッションの復帰できるが、    tomcatを停止せずに再起動すると、セッションが保存されずにきえてしまう場合がある。
A-pZ

2016/06/06 04:43

"セッションを常に保持する"(ないしはセッションそのもの?)が少し曖昧でしょうか。 (1)setMaxInactiveInterval(-1)を指定したときは、セッションへ格納したオブジェクトとセッションIDはTomcatに残ります。 (2)ブラウザを全て閉じた後にふたたび同じアプリケーションを実行したときには、別のセッションIDが発行されますので、もし前のセッションを復帰したい場合は、Tomcatの標準設定であればセッションIDをクッキーを使って指定します。 (3)のTomcatを停止せずにOSを再起動の意味、で話をしますが、それに関してはセッション情報をファイルへ出力している場合は復帰できますが、OS停止→Tomcatのサービス強制停止した場合は正しく保存できていない可能性もあります。
退会済みユーザー

退会済みユーザー

2016/06/06 05:12

ご回答ありがとうございます。 理解が合っているか確認ですが、 setMaxInactiveInterval(-1)とした場合において、aという情報をセッションに残したら、その後、サーバー再起動、ブラウザ再起動にかかわらず、何回でもaという情報が取り出せる。 ただし、強制終了があった場合は、取り出せなくなる場合がある。 で良いでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問