セッション管理の基礎知識 |
|
サーブレット(Servlet)におけるセッション管理を実現するには、通常はHttpSessionを使用しますが、次の点に留意する必要があります。
まず1つは、Cookieが使用できるかどうかという点です。これは、不特定多数を対象としたシステムの場合は、ブラウザのCookieを無効にしている人がいることを考慮する必要があるということです。
もう1つは、クラスタリングなどを行っている場合に、HttpSessionが使用できるかどうかという点です。これは、使用しているアプリケーションサーバの実装によりますので、各アプリケーションサーバのマニュアルなどを参照してください。システムを設計する段階で、上記の点を考慮したうえで、セッション管理をどのように実現するかを考える必要があります。
上記のようにCookieが使用できない場合などは、どのように対処すればよいのでしょうか。解決策の1つは、URL rewritingという方法で、もう1つは、HTMLのHIDDENパラメータを使用する方法です。
まず、URL rewritingという方法について説明します。これは、サーブレットのリンク先URLにSessionIDを連結することで、Cookieを使用せずにSessionIDを送信する方法です。具体的には、HttpServletRequestクラスのencodeURLメソッドの引数にURLを渡すと、SessionIDが付加されたURLが返り値として取得できます。このURLをサーブレットのリンク先として使用するだけで、サーバ側のHttpSessionの仕組みをそのまま利用することができます。このencodeURLメソッドは、クライアント側がCookieを使用不可能な場合のみURLにSessionIDを付加しますので、この仕組みを利用すると、クライアントがCookieを使用可能かどうかにかかわらず、コーディングすることができます。
次に、HTMLのHIDDENパラメータを使用する方法について説明します。HttpSessionは、Cookieに格納されたSessionIDを利用して、クライアントを識別していますが、このCookieの代わりにHIDDENパラメータを利用します。サーバがクライアントにHTMLを送信するときに、各クライアントに割り当てた一意なIDをHIDDENパラメータとして埋め込みます。サーバはクライアントから要求を受け取ると、HIDDENパラメータのIDを使用して、各クライアントのセッション情報を識別します。HttpSessionとは異なり、HIDDENパラメータの埋め込みやパラメータの解析などの処理を、開発者が実装する必要があります。
「Java Solution FAQ」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|