TomcatやJBossなどのWebコンテナを使用し、Webアプリケーションを開発する上で、セッション管理をする機会は多いです。
よく例として例えられているのが、ECサイトのショッピングカートでブラウザを再起動しても一度入れた商品が、ログアウトされるまで一定期間カートに入った状態でいるという仕組みを実現する上で使われています。
ここでは、JBoss(Tomcat)でのセッションタイムアウトの設定方法と、セッションの生成・破棄の方法、またそのセッションの生成・破棄時に処理をする方法のメモを記載したいと思います。
- セッションタイムアウトとは
- サーバ側には決められた時間セッションを保持する機能があり、一定時間何も操作(リクエスト)せずに放置した状態で決められた時間がたつとセッション情報を破棄されることをセッションタイムアウトと言う
目次
前提条件
- Windows XP Pro 32bit
- Servlet3.0
- java 1.7.xx
- JBoss As 7.1.1 final
web.xmlの設定
ここでは、Webコンテナにセッションタイムアウトの時間を設定します。以下のようにweb.xmlを編集します。
編集する箇所は、<session-timeout>分単位</session-timeout> であり、session-timeoutタグに分単位で記載します。
0や負の値を設定するとセッションタイムアウトをしないという設定になります。
例として30分後にセッションタイムアウトを起こすと言う設定ならば、以下のようになります。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
サーブレットでのセッションの生成・破棄方法
HttpServletRequestからセッションを生成・破棄します。例)
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //現在のセッションが存在しない場合セッションを生成する HttpSession session = request.getSession(true); //引数無しtrueと一緒 HttpSession session2 = request.getSession(); //現在のセッションが存在しない場合はnull HttpSession session3 = request.getSession(false); //セッションの破棄方法 セッションに保存してある全てのオブジェクトが破棄される session.invalidate(); }
サーブレットでのセッションの生成・破棄時のイベント
HttpSessionListenerを使いセッション時の生成・破棄の時に行う処理を記載します。package test; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener public class SampleSession implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { //セッションが生成された時に行う処理 } @Override public void sessionDestroyed(HttpSessionEvent se) { //セッションが破棄された時に行う処理 //セッションを取得 HttpSession session = se.getSession(); //ログアウト処理などのビジネスロジックを記載 } }
0 コメント:
コメントを投稿