LoginSignup
55
53

More than 5 years have passed since last update.

Tomcat のセッション永続化について

Last updated at Posted at 2014-03-10

Tomcat でセッション( javax.servlet.http.HttpSession )を
永続化(=つまり Tomcat 再起動後も使用できるようにすること)させるには、
context.xml の設定を変更することで可能になります。
(以下の情報は Tomcat 6, 7 のケースになります)

※ context.xml は、Amazon EC2 に Tomcat をインストールした場合は以下にあります。
/usr/share/tomcat7/conf/context.xml

設定値

context.xml に、
<Manager pathname=""/> を記載しないと、 SESSIONS.ser という永続化ファイルが作成されます
※インストール直後のデフォルトがこれです

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

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

context.xml に、
<Manager pathname="foo.ser"/> と記載すると、foo.ser という永続化ファイルが生成されます

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

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

context.xml に、
<Manager pathname=""/> と記載すると、 永続化ファイルは作成されません

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

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

作成した永続化ファイルのありか

server.xml または コンテキストファイルに記載された workDir の場所に生成されます

※ Amazon EC2 に Tomcat をインストールした場合のデフォルトは以下になります
/usr/share/tomcat7/work/Catalina/localhost/<コンテキスト名>/SESSIONS.ser

永続化ファイルの作成タイミング

Tomcat の終了時に生成され、起動時に破棄されます。

保存される情報について

セッションIDの他に HttpSession.setAttribute で設定した情報も永続化されます。
ただし、第2パラメータの java.lang.Object value は、
実クラスがシリアライズ可能な Serializable でないと値が正常に保存されません のでご注意を。

↓これだと復元されないので

public class SessionAttr {
    private String username;
    private String group;

    //以下省略 (setter getter など)

}

↓ Serializable を implements します

import java.io.Serializable;

public class SessionAttr implements Serializable  {
    private String username;
    private String group;

    //以下省略 (setter getter など)

}

※ java.lang.String の場合は Serializable が implements されているので、値が正常に保存されてますが
独自定義したクラスで、Serializable でない場合は、toString() の値が設定されているだけのように見えます。

参考リンク:Apache Tomcat Configuration Reference

55
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
53