カテゴリ: Servlet 更新日: 2026/09/04

Java ServletのHttpSessionとgetMaxInactiveIntervalメソッドを完全解説!初心者でもわかるセッション有効期限の取得方法

HttpSessionのgetMaxInactiveIntervalメソッド
HttpSessionのgetMaxInactiveIntervalメソッド

先生と生徒の会話形式で理解しよう

生徒

「JavaのServletでログイン情報をセッションに保存できるのは分かったのですが、そのセッションが何秒で無効になるのか確認する方法はありますか?」

先生

「あります。HttpSessionインターフェースのgetMaxInactiveIntervalメソッドを使うと、セッションが無操作の状態で何秒経過すると無効になる設定なのかを取得できます。」

生徒

「ログインしてからの経過時間ではなく、操作しなくなってからの時間なんですか?」

先生

「そこが重要なポイントです。セッションの最大非アクティブ時間を表すので、意味を間違えないように基本から詳しく確認していきましょう。」

1. HttpSessionインターフェースとは?

1. HttpSessionインターフェースとは?
1. HttpSessionインターフェースとは?

Java ServletでWebアプリケーションを開発するとき、利用者ごとの情報を複数のリクエストにまたがって保持したい場面があります。例えば、ログインしている利用者の識別情報、ショッピングカートの商品情報、入力途中の情報などです。このような情報をサーバー側で利用者ごとに管理するために使われる代表的な仕組みがHttpSessionです。

HttpSessionは、Servletでセッション管理を行うためのインターフェースです。現在のJakarta Servletを使用する環境では、一般的にjakarta.servlet.httpパッケージのHttpSessionを使用します。古いServletやSpring Bootの古い記事ではjavax.servlet.http.HttpSessionという記述を見ることがありますが、基本的なセッションの考え方は同じです。

HTTP通信は基本的に、一つ一つのリクエストが独立しています。そのため、何も仕組みを用意しなければ、前のリクエストで誰がログインしたのかを次のリクエストで自動的に覚えているわけではありません。HttpSessionを利用することで、同じ利用者から続けて送信されるリクエストの間で情報を共有しやすくなります。

Servletでは、HttpServletRequestのgetSessionメソッドを利用してHttpSessionを取得できます。取得したセッションには属性を保存したり、保存済みの属性を取り出したりできます。また、セッションそのものに関する情報として、セッション識別子、有効期限に関する設定、最終アクセス時刻なども確認できます。

HttpSessionは、同じ利用者に関する情報を複数のHTTPリクエストにまたがって管理するためのServletの重要な仕組みです。

Java Servlet初心者がHttpSessionを学ぶときは、単にログイン情報を保存する箱として覚えるだけでなく、いつまでセッションが有効なのか、いつ無効になるのかという有効期限の考え方も一緒に理解することが大切です。その有効期限に関係するメソッドの一つがgetMaxInactiveIntervalです。

2. getMaxInactiveIntervalメソッドとは?

2. getMaxInactiveIntervalメソッドとは?
2. getMaxInactiveIntervalメソッドとは?

HttpSessionのgetMaxInactiveIntervalメソッドは、そのセッションに設定されている最大非アクティブ時間を秒単位で取得するためのメソッドです。最大非アクティブ時間とは、簡単にいうと、利用者から新しいリクエストがない状態がどれくらい続くとセッションを無効にしてよいかを表す時間です。

例えば最大非アクティブ時間が千八百秒に設定されている場合、何もアクセスがない状態が一定時間続くと、そのセッションは有効期限切れになります。千八百秒は三十分なので、ログイン後に長時間操作をしなかった場合などにセッションが切れる仕組みをイメージすると分かりやすいでしょう。

ここで初心者が注意したいのは、getMaxInactiveIntervalがセッションの残り時間を直接返すメソッドではないという点です。取得できるのは、そのセッションに設定されている非アクティブ時間の上限です。現在あと何秒で期限切れになるのかをそのまま返しているわけではありません。

基本的な呼び出し方は非常に簡単です。


HttpSession session = request.getSession();
int seconds = session.getMaxInactiveInterval();

response.setContentType("text/html; charset=UTF-8");
response.getWriter().println("<p>セッションの最大非アクティブ時間は " + seconds + " 秒です。</p>");

getMaxInactiveIntervalの戻り値は整数型です。単位は秒なので、戻り値が千八百であれば三十分、三千六百であれば一時間というように考えます。

初心者が覚えたいポイント

getMaxInactiveIntervalは、現在の残り時間ではなく、セッションが無操作状態になってから無効になるまでの最大時間設定を秒単位で取得するメソッドです。

3. getMaxInactiveIntervalの基本的な使用例

3. getMaxInactiveIntervalの基本的な使用例
3. getMaxInactiveIntervalの基本的な使用例

実際にServletでgetMaxInactiveIntervalを使ってみましょう。ブラウザからServletへアクセスしたときにセッションを取得し、最大非アクティブ時間を画面に表示する簡単な例です。


package com.example.servlet;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet("/session-timeout")
public class SessionTimeoutServlet extends HttpServlet {

    @Override
    protected void doGet(
            HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession session = request.getSession();

        int maxInactiveInterval =
                session.getMaxInactiveInterval();

        response.setContentType(
                "text/html; charset=UTF-8"
        );

        response.getWriter().println(
                "<h1>セッション設定</h1>"
        );

        response.getWriter().println(
                "<p>最大非アクティブ時間は "
                + maxInactiveInterval
                + " 秒です。</p>"
        );
    }
}

このServletへアクセスすると、現在のHttpSessionに設定されている最大非アクティブ時間を取得できます。実際に表示される秒数は、使用しているServletコンテナやWebアプリケーションの設定によって異なる場合があります。

例えば取得結果が次のようになったとします。


最大非アクティブ時間は 1800 秒です。

この場合は、無操作の状態が三十分程度続いた場合にセッションが無効になる設定だと読み取れます。

ただし、これはServletへ最初にアクセスしてから必ず三十分後にセッションが切れるという意味ではありません。利用者が途中で別のページへアクセスするなど、セッションに関連する新しいリクエストが発生すれば、非アクティブ状態ではなくなります。セッションタイムアウトを理解するときは、この無操作時間という考え方がとても重要です。

4. 秒を分に変換して分かりやすく表示する方法

4. 秒を分に変換して分かりやすく表示する方法
4. 秒を分に変換して分かりやすく表示する方法

getMaxInactiveIntervalの戻り値は秒単位ですが、利用者や管理者へ表示する場合は、分に変換したほうが分かりやすいことがあります。例えば千八百秒と言われるより、三十分と言われたほうが直感的に理解できます。

秒から分へ変換するときは、取得した値を六十で割ります。Servletで表示する場合は次のように書けます。


package com.example.servlet;

import java.io.IOException;

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet("/session-minutes")
public class SessionMinutesServlet extends HttpServlet {

    @Override
    protected void doGet(
            HttpServletRequest request,
            HttpServletResponse response)
            throws IOException {

        HttpSession session = request.getSession();

        int seconds =
                session.getMaxInactiveInterval();

        int minutes = seconds / 60;

        response.setContentType(
                "text/html; charset=UTF-8"
        );

        response.getWriter().println(
                "<p>セッションの無操作上限は "
                + minutes
                + " 分です。</p>"
        );
    }
}

最大非アクティブ時間が千八百秒なら、六十で割ることで三十分として表示できます。管理画面やデバッグ画面でセッション設定を確認したい場合に、このような変換を入れると読みやすくなります。

ただし、必ず六十で割り切れる値が設定されるとは限りません。例えば百秒という設定なら、一分と四十秒です。より正確に表示したい場合は、分と余りの秒数に分ける方法もあります。

getMaxInactiveIntervalそのものは秒単位で扱うメソッドなので、プログラム内部では戻り値の単位を間違えないようにしましょう。三十分を設定したつもりで三十という値を扱うと、実際には三十秒として解釈してしまう可能性があります。

5. setMaxInactiveIntervalとの違いを理解しよう

5. setMaxInactiveIntervalとの違いを理解しよう
5. setMaxInactiveIntervalとの違いを理解しよう

HttpSessionには、getMaxInactiveIntervalと名前がよく似たsetMaxInactiveIntervalというメソッドがあります。この二つは役割が異なるため、Servlet初心者はセットで覚えると理解しやすくなります。

getMaxInactiveIntervalは現在設定されている最大非アクティブ時間を取得するためのメソッドです。一方、setMaxInactiveIntervalは最大非アクティブ時間を設定するためのメソッドです。

例えば、現在のセッションについて無操作状態が十分続いたら無効になるように設定し、その設定値を確認する例は次のようになります。


package com.example.servlet;

import java.io.IOException;

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet("/change-session-timeout")
public class ChangeSessionTimeoutServlet extends HttpServlet {

    @Override
    protected void doGet(
            HttpServletRequest request,
            HttpServletResponse response)
            throws IOException {

        HttpSession session = request.getSession();

        session.setMaxInactiveInterval(600);

        int seconds =
                session.getMaxInactiveInterval();

        response.setContentType(
                "text/html; charset=UTF-8"
        );

        response.getWriter().println(
                "<p>設定された時間は "
                + seconds
                + " 秒です。</p>"
        );
    }
}

この例では六百秒、つまり十分を設定しています。そのあとgetMaxInactiveIntervalを呼び出すことで、設定した値を確認しています。

getMaxInactiveIntervalは取得、setMaxInactiveIntervalは設定と覚えると区別しやすくなります。

実際のWebアプリケーションでは、セッションタイムアウトを個別のServletで毎回設定するのではなく、Webアプリケーション全体の設定として管理する場合もあります。どこで設定しているかによって取得される値が変わることがあるため、動作確認では設定場所も確認しましょう。

6. セッションタイムアウトとログイン機能の関係

6. セッションタイムアウトとログイン機能の関係
6. セッションタイムアウトとログイン機能の関係

HttpSessionとgetMaxInactiveIntervalが特に重要になる代表的な場面がログイン機能です。Java Servletでログイン処理を作る場合、認証に成功した利用者の情報をHttpSessionへ保存し、その後のページでもログイン状態を確認する構成がよく使われます。

しかし、利用者がログインしたあと永久にセッションを残し続ける設計は適切とは限りません。長時間操作していない利用者のセッションを一定時間後に無効化することで、サーバー上の不要なセッションを減らしたり、ログイン状態が長期間残り続けることを防いだりできます。

例えば、業務システムで利用者が席を離れたままブラウザを開いていた場合を考えてみましょう。一定時間の無操作後にセッションが無効になれば、再び操作するときにログインを求める仕組みを作りやすくなります。

getMaxInactiveIntervalを利用すると、そのセッションに設定されている非アクティブ時間をプログラムから確認できます。そのため、開発中のデバッグ、設定値の確認、管理画面での情報表示などに活用できます。

ただし、getMaxInactiveIntervalを呼び出しただけでセッションの有効期限が延長されたり、タイムアウト設定が変更されたりするわけではありません。このメソッドはあくまで設定値を取得するためのものです。

ログイン機能を学ぶ場合は、HttpSessionのsetAttribute、getAttribute、invalidateなどのメソッドと一緒に、getMaxInactiveIntervalも覚えておくとセッション管理全体の理解が深まります。

7. getMaxInactiveIntervalは残り時間を返すメソッドではない

7. getMaxInactiveIntervalは残り時間を返すメソッドではない
7. getMaxInactiveIntervalは残り時間を返すメソッドではない

getMaxInactiveIntervalについて最も間違えやすい点の一つが、現在のセッションの残り時間を返すメソッドだと思ってしまうことです。名前に時間を表す言葉が入っているため、初心者が勘違いしやすい部分です。

例えば最大非アクティブ時間が千八百秒に設定されていて、最後のアクセスから十分経過していたとしても、getMaxInactiveIntervalの戻り値が千二百秒になるわけではありません。取得できるのは基本的に設定されている千八百秒です。

現在のタイムアウトまでのおおよその時間を考えたい場合は、セッションの最終アクセス時刻など、別の情報も確認する必要があります。HttpSessionにはgetLastAccessedTimeというメソッドも用意されており、最後にアクセスされた時刻を確認するために利用できます。

ただし、タイムアウトまでの残り時間を独自計算する場合は、Servletコンテナによるセッション管理の動作や、リクエスト処理中の時刻更新なども意識する必要があります。初心者の段階では、まずgetMaxInactiveIntervalは設定されている最大非アクティブ時間を返すと正確に覚えておきましょう。

getMaxInactiveIntervalの戻り値を、その瞬間のセッション残り時間だと考えないように注意しましょう。

セッションの期限切れに関する不具合を調査するときも、この違いを理解していないと、表示されている秒数と実際のタイムアウト時刻が合わないと誤解する可能性があります。

8. セッションが無効になった場合とinvalidateとの違い

8. セッションが無効になった場合とinvalidateとの違い
8. セッションが無効になった場合とinvalidateとの違い

HttpSessionは最大非アクティブ時間を超えた場合に無効になることがありますが、プログラムから明示的にセッションを無効化する方法もあります。それがHttpSessionのinvalidateメソッドです。

例えばログアウト処理では、現在のログイン情報を保持しているセッションを終了させるためにinvalidateを利用することがあります。これは最大非アクティブ時間を待って自動的に期限切れになるのとは異なり、アプリケーション側から明示的にセッションを終了させる考え方です。

つまり、セッションの終了には、一定時間操作されなかったことによるタイムアウトと、ログアウトなどによって明示的に無効化する方法があると理解するとよいでしょう。

getMaxInactiveIntervalはこのうち、無操作によるタイムアウトに関係する設定値を確認するメソッドです。ログアウト処理そのものを実行するメソッドではありません。

Servletでログイン機能を作る場合は、ログイン成功時にHttpSessionへ利用者情報を保存し、ログイン中はその情報を参照し、ログアウト時にはセッションを無効化するという流れを学ぶと、getMaxInactiveIntervalの位置付けも理解しやすくなります。

セッション管理は、単純に値を保存するだけでなく、作成、利用、有効期限、無効化という流れで考えることが大切です。

9. getMaxInactiveIntervalを使うときの注意点

9. getMaxInactiveIntervalを使うときの注意点
9. getMaxInactiveIntervalを使うときの注意点

getMaxInactiveIntervalを使用するときは、まず戻り値の単位が秒であることを忘れないようにしましょう。画面上では分単位で説明したい場合でも、メソッドから取得した直後の値は秒として扱います。

次に、取得した値は残り時間ではなく最大非アクティブ時間の設定値です。例えば三十分に設定されているセッションへ何度アクセスしても、getMaxInactiveIntervalが現在の経過時間に応じて毎秒減少するわけではありません。

また、実際にどの値が取得されるかはWebアプリケーションやServletコンテナ側のセッション設定によって変わる可能性があります。開発環境と本番環境で設定が異なっていると、同じServletコードでも取得される値が違うことがあります。

さらに、現在のServlet環境がJakarta Servletなのか、古いJava EE時代のServletなのかも確認しておくとよいでしょう。新しい環境ではjakarta.servlet.http.HttpSessionを利用するのが一般的ですが、古い記事や既存システムではjavax.servlet.http.HttpSessionが使われている場合があります。

セッションタイムアウトを短く設定しすぎると、利用者が少し操作を止めただけでログイン状態が切れてしまい、使いにくいWebアプリケーションになる可能性があります。逆に長すぎる設定も、アプリケーションの用途によっては適切ではありません。実際のシステムでは、利用目的や運用方法を考えて設定することが重要です。

getMaxInactiveIntervalで確認するポイント

  • HttpSessionの最大非アクティブ時間を取得する。
  • 戻り値の単位は秒として扱う。
  • 現在の残り時間を返すメソッドではない。
  • 設定変更にはsetMaxInactiveIntervalを使用する。
  • ログアウトなどの明示的な終了にはinvalidateを利用する。
  • ServletコンテナやWebアプリケーションの設定も確認する。

Java ServletのHttpSessionを学ぶときは、属性の保存や取得だけでなく、セッションがいつまで有効なのかという時間の仕組みも理解しておくことが大切です。getMaxInactiveIntervalを理解すると、ログイン管理、セッションタイムアウト、Webアプリケーションの状態管理について、より具体的に考えられるようになります。

その後は、setMaxInactiveInterval、getLastAccessedTime、invalidate、setAttribute、getAttributeなどのHttpSessionの主要メソッドを続けて学ぶと、Servletにおけるセッション管理の仕組みを体系的に理解しやすくなります。

まとめ

まとめ
まとめ

今回は、Java Servletでセッション管理を行うときに重要となるHttpSessionインターフェースと、getMaxInactiveIntervalメソッドについて学びました。HttpSessionは、利用者ごとの情報を複数のHTTPリクエストにまたがって保持するための仕組みです。ログイン状態、利用者情報、ショッピングカートの内容、入力途中のデータなどを管理するときに利用されます。

HTTP通信は基本的に、一回一回のリクエストが独立しています。そのため、何も仕組みを用意しなければ、前回のリクエストでログインした利用者の情報を次のリクエストで自動的に引き継ぐことはできません。そこでHttpSessionを利用すると、同じ利用者に関する情報をサーバー側で一定期間保持し、複数の画面やリクエストから参照できるようになります。

ServletでHttpSessionを取得するときは、HttpServletRequestのgetSessionメソッドを利用します。取得したHttpSessionには、setAttributeで値を保存し、getAttributeで保存した値を取得できます。ログイン機能では、認証に成功した利用者の情報をセッションへ保存し、その後の画面でログイン状態を確認するという使い方がよくあります。

getMaxInactiveIntervalで確認できる内容

getMaxInactiveIntervalメソッドは、そのHttpSessionに設定されている最大非アクティブ時間を取得するためのメソッドです。最大非アクティブ時間とは、利用者からセッションに関連する新しいアクセスがない状態がどれくらい続くと、そのセッションを無効にしてよいかを表す時間です。

戻り値の単位は秒です。例えば千八百秒が設定されている場合は三十分、三千六百秒なら一時間という意味になります。Java Servletでセッションタイムアウトの設定を確認したい場合や、開発中に現在のセッション設定を調べたい場合に役立ちます。


HttpSession session = request.getSession();

int seconds = session.getMaxInactiveInterval();

response.setContentType("text/html; charset=UTF-8");
response.getWriter().println(
        "<p>セッションの最大非アクティブ時間は "
        + seconds
        + " 秒です。</p>"
);

このように、getSessionで現在のセッションを取得したあと、getMaxInactiveIntervalを呼び出すだけで設定値を確認できます。戻り値は整数型なので、そのまま秒数として扱うこともできますし、必要に応じて分へ変換して表示することもできます。

残り時間を取得するメソッドではない

getMaxInactiveIntervalを理解するときに、特に注意したいのが残り時間との違いです。このメソッドは、現在あと何秒でセッションが切れるかを返しているわけではありません。取得できるのは、セッションに設定されている最大非アクティブ時間です。

例えば最大非アクティブ時間が千八百秒に設定されていて、利用者が最後に操作してから十分経過していたとしても、getMaxInactiveIntervalの結果が千二百秒になるわけではありません。基本的には設定されている千八百秒が取得されます。

セッションタイムアウトまでのおおよその残り時間を考えたい場合は、getLastAccessedTimeなど、セッションの最終アクセス時刻に関する情報も確認する必要があります。getMaxInactiveIntervalだけを見て、現在の残り時間だと判断しないことが大切です。

getMaxInactiveIntervalはセッションの最大非アクティブ時間を取得するメソッドであり、タイムアウトまでの残り秒数を取得するメソッドではありません。

秒を分に変換すると分かりやすい

getMaxInactiveIntervalの戻り値は秒単位ですが、管理画面や確認画面では分単位で表示したほうが分かりやすい場合があります。例えば千八百秒と表示するより、三十分と表示したほうが利用者や管理者には直感的です。


HttpSession session = request.getSession();

int seconds = session.getMaxInactiveInterval();
int minutes = seconds / 60;

response.setContentType("text/html; charset=UTF-8");
response.getWriter().println(
        "<p>セッションの無操作上限は "
        + minutes
        + " 分です。</p>"
);

このように秒数を六十で割れば、分単位へ変換できます。ただし、必ず六十で割り切れる設定とは限りません。より正確に表示したい場合は、分と秒に分けて表示する方法も考えられます。

setMaxInactiveIntervalとの違い

HttpSessionには、getMaxInactiveIntervalと名前がよく似ているsetMaxInactiveIntervalメソッドもあります。この二つは役割が異なります。

getMaxInactiveIntervalは現在設定されている最大非アクティブ時間を取得するためのメソッドです。一方、setMaxInactiveIntervalは最大非アクティブ時間を設定するためのメソッドです。取得はget、設定はsetと覚えると初心者でも区別しやすくなります。


HttpSession session = request.getSession();

session.setMaxInactiveInterval(600);

int seconds = session.getMaxInactiveInterval();

response.setContentType("text/html; charset=UTF-8");
response.getWriter().println(
        "<p>設定されている時間は "
        + seconds
        + " 秒です。</p>"
);

この例では、setMaxInactiveIntervalで六百秒を設定したあと、getMaxInactiveIntervalでその値を取得しています。六百秒は十分なので、このセッションでは無操作状態が十分続いた場合にタイムアウトする設定として扱われます。

getMaxInactiveIntervalは取得、setMaxInactiveIntervalは設定です。名前が似ているため、役割をセットで覚えておくと理解しやすくなります。

ログイン機能とセッションタイムアウト

HttpSessionの有効期限は、Java Servletでログイン機能を作る場合に特に重要です。ログイン成功後に利用者情報をHttpSessionへ保存すると、その後の画面でもログイン中の利用者を識別できます。

しかし、セッションが永久に残り続ける設計では、利用者が長時間操作していないにもかかわらずログイン状態が維持され続けることがあります。そのため、一定時間アクセスがなければセッションを無効にするセッションタイムアウトが利用されます。

業務システムなどでは、利用者が席を離れてブラウザを開いたままにすることもあります。そのような場合でも、一定時間無操作の状態が続いたあとにセッションが無効になれば、再度利用するときにログインを求める仕組みを作りやすくなります。

getMaxInactiveIntervalを利用すると、現在のセッションに設定されている無操作時間の上限を確認できます。セッションタイムアウトが想定どおり設定されているか確認したい場合や、開発環境と本番環境の設定差を調べたい場合にも役立ちます。

invalidateとの違いも理解しておこう

セッションが無効になる方法には、一定時間操作がなかったことによる自動的なタイムアウトだけでなく、プログラムから明示的に無効化する方法もあります。そのときに利用する代表的なメソッドがinvalidateです。

例えばログアウトボタンを押したときには、現在のセッションをinvalidateで無効化し、保存されているログイン情報を利用できない状態にする処理がよく使われます。

getMaxInactiveIntervalは、無操作によるタイムアウト設定を確認するメソッドです。invalidateは、プログラムからセッションそのものを終了させるためのメソッドです。役割がまったく異なるため、混同しないようにしましょう。

HttpSessionを学ぶときに一緒に覚えたいメソッド

HttpSessionには、getMaxInactiveInterval以外にもセッション管理でよく利用するメソッドがあります。setAttributeはセッションへ値を保存し、getAttributeは保存された値を取得します。invalidateはセッションを明示的に無効化します。getLastAccessedTimeは、セッションに最後にアクセスした時刻を確認するときに利用できます。

これらを組み合わせることで、ログイン情報の保存、ログイン状態の確認、セッションタイムアウトの確認、ログアウト処理まで一連のセッション管理を実装できるようになります。

Java Servlet初心者は、最初からすべてのメソッドを暗記する必要はありません。まずはHttpSessionが複数のリクエストにまたがって利用者ごとの情報を保持する仕組みであることを理解し、そのあとに属性の保存、取得、有効期限、無効化という順番で学ぶと理解しやすくなります。

HttpSessionとgetMaxInactiveIntervalで覚えておきたいポイント

  • HttpSessionは複数のHTTPリクエストにまたがって利用者ごとの情報を管理する。
  • getMaxInactiveIntervalは最大非アクティブ時間を取得する。
  • 戻り値の単位は秒である。
  • 現在の残り時間を直接取得するメソッドではない。
  • 設定を変更するときはsetMaxInactiveIntervalを利用する。
  • 明示的にセッションを終了するときはinvalidateを利用する。
  • ログイン管理やセッションタイムアウトの理解に重要なメソッドである。

HttpSessionとgetMaxInactiveIntervalを理解すると、Java Servletにおけるセッション管理の仕組みがかなり分かりやすくなります。単にログイン情報を保存するだけでなく、セッションがどのような条件で有効期限切れになるのか、設定値をどのように取得するのか、ログアウト時にはどう終了させるのかまで考えられるようになるためです。

Servletを使ったWebアプリケーションでは、HTTPリクエストとレスポンスだけでなく、利用者の状態をどのように維持するかが重要です。HttpSessionの基本を押さえたうえで、getMaxInactiveInterval、setMaxInactiveInterval、setAttribute、getAttribute、getLastAccessedTime、invalidateなどを順番に学んでいくと、ログイン機能やショッピングカートなど、実践的なセッション管理へつなげやすくなります。

先生と生徒の振り返り会話

生徒

「HttpSessionは、ログイン情報のような利用者ごとのデータを複数のリクエストで使うための仕組みなんですね。」

先生

「そのとおりです。HTTPはリクエストごとに独立しているので、HttpSessionを使うことで利用者の状態を一定期間保持しやすくなります。」

生徒

「getMaxInactiveIntervalは、そのセッションがあと何秒残っているかを取得するメソッドではないんですよね。」

先生

「はい。取得できるのは最大非アクティブ時間の設定値です。現在の残り時間そのものではありません。」

生徒

「千八百が返ってきた場合は、千八百秒、つまり三十分の無操作時間が設定されていると考えればいいですか?」

先生

「その理解で大丈夫です。戻り値の単位が秒であることも忘れないようにしましょう。」

生徒

「三十分に設定されていて、すでに十分経過していても、getMaxInactiveIntervalが千二百になるわけではないんですね。」

先生

「そうです。設定値として千八百が取得されます。残り時間を考える場合は最終アクセス時刻など、ほかの情報も必要になります。」

生徒

「設定そのものを変更したい場合はどうするんですか?」

先生

「setMaxInactiveIntervalを使います。getは取得、setは設定と覚えておくと分かりやすいですよ。」

生徒

「ログアウトするときは、タイムアウトまで待つ必要がありますか?」

先生

「いいえ。ログアウトではinvalidateを使って、現在のセッションを明示的に無効化する方法があります。」

生徒

「つまり、タイムアウトによる終了と、ログアウトによる終了は別なんですね。」

先生

「そのとおりです。タイムアウトは一定時間アクセスがないことで発生し、invalidateはプログラム側から明示的にセッションを終了させます。」

生徒

「ログイン機能を作るなら、setAttributeやgetAttributeも一緒に覚えたほうがよさそうですね。」

先生

「はい。ログイン成功時にsetAttributeで利用者情報を保存し、別のページでgetAttributeを使って確認する流れを理解すると、HttpSessionの使い方がかなり分かりやすくなります。」

生徒

「getMaxInactiveIntervalは、ログイン情報を保存するメソッドではなく、セッションタイムアウトの設定を確認するためのメソッドということですね。」

先生

「その理解が大切です。HttpSessionにはそれぞれ役割の異なるメソッドがあるので、保存、取得、有効期限、無効化という流れで整理すると覚えやすくなります。」

生徒

「これでJava Servletのセッションタイムアウトがかなり理解できました。」

先生

「次はgetLastAccessedTimeやsetAttribute、getAttribute、invalidateなども確認すると、Servletのセッション管理をさらに深く理解できます。」

カテゴリの一覧へ
新着記事
New1
Thymeleaf
Thymeleafの#mapsユーティリティとは?初心者向けマップ操作ガイド
更新記事
New2
Thymeleaf
Thymeleafの#arraysユーティリティとは?初心者向け配列操作ガイド
更新記事
New3
Thymeleaf
Thymeleafの#strings.sizeメソッドとは?初心者向け文字列の長さ取得ガイド
更新記事
New4
Thymeleaf
Thymeleafの#datesユーティリティとは?初心者向け日付操作ガイド
更新記事
人気記事
No.1
Java&Spring記事人気No1
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.2
Java&Spring記事人気No2
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.3
Java&Spring記事人気No3
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
Java
JavaのDateクラスの使い方を完全ガイド!初心者でもわかる日付操作
No.5
Java&Spring記事人気No5
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.6
Java&Spring記事人気No6
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.7
Java&Spring記事人気No7
Thymeleaf
Thymeleafのth:hrefの使い方を全解説。初心者でも完璧に理解できるガイド
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleafのth:valueの使い方を解説!フォーム入力値を保持したり動的に表示する方法