ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

セッションタイムアウトについて

今回は、セッションタイムアウトについてお話していこうと思います。

セッションとは?

セッションタイムアウトを説明する前に、まずはセッションについて説明します。

ブラウザを使ってAmazon楽天などのショッピングサイトで、カートに商品を入れて様々な画面を遷移してから、購入するような操作はよく行うかと思います。

WebではHTTP(Hyper Text Transfer Protocol)という通信プロトコルを使用して、クライアントであるブラウザと、情報を提供するサーバーとでお互いにやりとりします。このHTTPはステートレスなプロトコルです。ステートレスとは、状態を持たないということです。
一つのリクエストでそれぞれのリクエストは完結してしまいます。しかし、上記のようなショッピングサイトでは複数のリクエストを一人のユーザーのリクエストとして認識しないといけません。そうしないと、他人が操作した結果が自分の画面に表れてしまうかもしれません。
そのような課題を解決するために使われるのがいわゆるセッションです。

セッションは、疑似的に複数のHTTPリクエストを一人のユーザーのリクエストとして認識させる仕組みです。具体的には、セッションIDと呼ばれる値をサーバー側で生成し、それをHTTPレスポンスのCookieに設定します。ブラウザにそのCookieの値をその後のリクエストに添付して送信してもらうことで、サーバー側は複数のリクエストを一人のユーザーのリクエストであると判定できることになります。

セッションタイムアウトとは?

上記、長い説明になってしまいましたが、次は本記事の趣旨であるセッションタイムアウトについてです。

これまでお話してきましたが、それぞれのセッションはセッションIDで識別します。
このセッションIDは、サーバー側で保持することになるため、数人程度のリクエストではたいした保存量にはなりませんが、これが何千、何万となると話が変わってきます。サーバー側のリソースにも限りがあるため、このセッションの情報は使用されなくなったら削除しなくてはなりません。

セッションの削除についてですが、一定期間操作がないものは必要でないと考え削除をしても良いといえます。
そこで、サーバー側で事前に決めた時間内にユーザーの操作がない場合はセッションIDを削除することで、サーバー側のリソースに余裕を持たせることができます。

そのサーバー側で事前に決めた時間内の後に、ユーザーがリクエストをした場合にセッションタイムアウトが発生します。
セッションタイムアウトになると、今まで操作した内容は削除されてしまうため、何かの操作をしていた場合は最初からやり直す必要があります。
しかし、これまで説明した通りサーバーのリソースのためにも重要な仕組みになります。

おわりに

いかがでしたでしょうか。セッションタイムアウトについて説明してみました。
実は、Tomcatでセッションタイムアウトの設定をするにはどうすればよいかを記事にしようと思っていたのですが
意外と分量が多くなってしまったので、今回は単純にセッションタイムアウトに絞って書いてみました。
近いうちに、Tomcatでセッションタイムアウトをどのように設定すればよいかを記事にしたいと思います。

最後までお読みいただきありがとうございました。今回はこの辺で失礼いたします。