サーブレットセッション管理:Cookieセッション追跡

2952 ワード

CookieはHTTPリクエストと応答に埋め込むことができるデータである.通常、Webサーバは応答するヘッダにCookie値を埋め込み、ブラウザはその後の要求で同じCookieを携帯する.Cookieの情報の一部はセッションIDを格納するために使用され、このIDはサーバによっていくつかのHTTP要求をセッションにバインドするために使用される.Cookieはブラウザによってクライアントに保存され、通常はテキストファイルとして保存されます.Cookieには、オプションのコメント、バージョン番号、最長生存サイクルなど、他の属性も含まれています.
統合クライアントのサーバに対する要求はすべてCookieを携帯するため、Cookieにセッションに関する情報を追加することでセッション追跡の目的を達成することができる.次に、サーブレットを作成することによって、Cookieによるセッション追跡の方法を隠す.サンプルコードは次のとおりです.
package com.yl.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *   Cookie      ,         ,     +1
 * 
 * @author LYYL
 *
 */
@WebServlet(name="servlet", urlPatterns={"/cookietrack"})
public class CookieTrackServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		Cookie cookie = null;
		Cookie[] cookies = request.getCookies();
		if(cookies != null){
			boolean flag = false;
			for(int i = 0; i < cookies.length; i++){
				if(cookies[i].getName().equals("VisitTimes")){
					String v = cookies[i].getValue();
					int value = Integer.parseInt(v) + 1;
					cookies[i].setValue(Integer.toString(value));
					response.addCookie(cookies[i]);
					flag  = true;
					cookie = cookies[i];
				}
			}
		}
		
		if(cookie == null){
			int maxAge = -1;
			cookie = new Cookie("VisitTimes", "1");
			cookie.setPath(request.getContextPath());
			cookie.setMaxAge(maxAge);
			response.addCookie(cookie);
		}
		
		//    
		response.setContentType("text/html; charset=utf-8");
		PrintWriter pw = response.getWriter();
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<title>Cookie    </title>");
		pw.println("</head>");
		pw.println("<body>");
		pw.println("<h2>  !</h2>");
		pw.println("<    >"+cookie.getValue()+"      <br>");
		pw.println("</body>");
		pw.println("</html>");
		
		pw.flush();
		pw.close();
	}
}

この例では、セッション内のページへのアクセス数を追跡します.プログラムは、ページアクセスの回数を「visitTimes」というクッキーに書き込む.このCookieは、ページに対する要求が毎回含まれるため、Cookieの値を取り出すたびにページのアクセス回数を表示するとともに、更新された値をCookieに書き込むことでセッション追跡の目的を達成する.
ブラウザを開いて入力:http://localhost:8080/Servlet/cookietrack,現在の登録回数が得られ,ページをリフレッシュするごとに登録回数が+1となる.