
Javaサーブレットで、セッションを確立する場合は下記の構文を使用します。
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ HttpSession session=request.getSession(true); }
Javaでのセッション管理は、「javax.servlet.http.HttpSession」というインターフェイスの機能になり、「HttpServletRequest」(クライアントからのリクエストに関するインターフェイス)から取得することができます。
getSessionメソッドの引数のtrueとfalseの違い
getSessionメソッドの引数をtrueとした場合
HttpSession session=request.getSession(true);
既にセッションが確立されている場合は、現在のセッションを返し、確立されていない場合は、新しいセッションを作ります。
なので、通常のWebアプリであれば、ログイン画面のみに使用します。
getSessionメソッドの引数をfalseとした場合
HttpSession session=request.getSession(false);
既にセッションが確立されている場合は、現在のセッションを返し、確立されていない場合は、nullを返します。
なので、通常のWebアプリであれば、ログイン以外の画面に使用します。
セッション切れということで、これがnullになっていた場合は、再ログイン画面を促す画面を表示させます。
また、trueもfalseもどちらも指定しなかった場合は、デフォルトでtrueとして動きますので、ご注意を!
セッションの有効期限
セッションには、有効期限があります。
Tomcatだとデフォルトでは、30分になっており、HttpSessionへのアクセスがなければセッションは自動的に破棄されます。
ブラウザによるセッションの動作の違い
違うPCからのアクセスは異なるセッションとみなされるのは想像が付くかと思います。
では、以下の場合はどうでしょうか。
同じPCの別ブラウザでアクセスした場合
「別セッション」とみなされます。なので、テストの際等は、この仕組みを利用して効率よく活用できるかもしれませんね。
同じPCの同じブラウザで、別タブ、別ウインドウで開いた場合
これは、基本的には「同一セッション」とみなされます。(ブラウザの種類によりますが、IE、Firefox、Chrome等の基本的なブラウザはまず大丈夫です。)
セッションデータはどこに保存されるか?
「サーバーのメモリ」に保存されます。なので、同時アクセス数が多い場合は、サーバーのメモリに負荷がかかってしまうので注意しましょう。
また、ハードディスクに書き込んで、リモート転送等をしたい場合は、Serializableインターフェイスを実装して、ハードディスクに書き込むという実装にしましょう。
この記事へのコメントはありません。