Spring Bootのth:action="@{/login}"で;jsessionidが付く理由とは?初心者向け徹底解説!

こんにちは。ゆうせいです。

今回は、Spring BootやThymeleafでWebアプリを開発しているときに遭遇しやすい
th:action="@{/login}"という記述で、URLの末尾に突然出てくる ;jsessionid=... の謎について、やさしく丁寧に解説していきます。

こんな現象、見たことありませんか?

<form th:action="@{/login}" method="post">

このように書いたとき、生成されたHTMLのURLがこうなってしまう場合:

/login;jsessionid=1234567890ABCDEF...

「なにこれ?バグ?セキュリティ的に大丈夫なの?」と戸惑う方も多いでしょう。
でも、心配しなくて大丈夫。これはちゃんとした仕組みによるものなんです。


なぜ;jsessionidがURLに付くの?

セッション管理のため

;jsessionidは、セッションID(Session ID)という情報をURLに埋め込んでいる状態です。

セッションとは、Webアプリが「このアクセスはこのユーザーから来たもの」と認識するための仕組みです。たとえばログイン情報を保持したり、カートに入れた商品情報を管理したりするのに使われます。

通常、セッションIDはCookie(クッキー)に保存されます。
でも、Cookieが使えない場合や無効化されている場合
には、仕方なくURLの末尾に追加する方法が使われるのです。

それが ;jsessionid=xxx という形。


どんなときにURLに出てくる?

実際にこの文字列が出てくるのは、以下のような状況です。

状況説明
クッキーが無効ブラウザでCookieをブロックしているとき
セッションのURLリライティングが有効サーバ設定やセキュリティポリシーで明示的に有効になっている場合

特にテスト環境や開発環境でCookieがうまく動いていないとき、よく見られる現象です。


どうしてThymeleafで出やすいの?

Thymeleafでは@{...}を使うと、Spring MVCのUrlBasedViewResolverと連携して、自動的にセッションIDを含むようなURLを生成することがあります。とくに、HttpServletResponse.encodeURL()が内部で使われるためです。

つまり、こう書くと:

<form th:action="@{/login}" method="post">

こうなる可能性がある:

<form action="/login;jsessionid=123ABC456DEF" method="post">


;jsessionidのメリットとデメリット

メリット

  • Cookieが使えなくてもセッション管理ができる
    • 例えば一部の古い端末や特殊な環境でも動作します。
  • 仕組みとしては堅牢
    • RFC(インターネットの標準)に準拠しています。

デメリット

  • URLが長くなる
    • 共有しづらくなったり、見た目が気になる。
  • URLからセッションIDが漏れる可能性
    • 他人にURLを送ると、セッションが乗っ取られるリスクがある。
  • 検索エンジンにインデックスされやすくなる
    • SEO的に不利な可能性があります。

対策・消したいときは?

たとえば、開発中は気になるから出てほしくない、という場合には
Cookieがちゃんと動作する設定を確認することが第一です。

また、Spring Bootで明示的に制御したい場合は、以下のように設定できます:

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieOnlySessionCustomizer() {
    return (factory) -> factory.addContextCustomizers(
        (context) -> context.setUseHttpOnly(true)
    );
}

また、application.propertiesでCookieの設定も見直してみましょう。


まとめ

  • ;jsessionidセッションIDをURLで管理していることを意味します。
  • 本来はCookieが使えない場合のフォールバック手段です。
  • セキュリティや見た目の問題から、Cookie方式が推奨されます。

今後の学習の指針

この話題をきっかけに、次のような技術にチャレンジしてみましょう!

  • HTTPセッションとステート管理の仕組みを理解する
  • Spring Securityでのログインとセッション管理
  • クッキーの使い方と、SameSite, HttpOnly, Secure属性の設定
  • CSRF対策とフォームのセキュリティ

「Webの裏側でどんなことが起きているのか」を知れば知るほど、アプリ設計のスキルもどんどん上がっていきますよ!

ぜひ、じっくり取り組んでいってくださいね。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。