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の裏側でどんなことが起きているのか」を知れば知るほど、アプリ設計のスキルもどんどん上がっていきますよ!
ぜひ、じっくり取り組んでいってくださいね。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
