CookieとSession

JavaEE(Session)

★HttpSessionインターフェースについて

メソッド:

void setAttribute(String name,Object value)

Object getAttribute(String name)

void removeAttribute(String name)

String getId()

void invalidate()

Enumeration getAttributeNames()

boolean isNew()

void setMaxInactiveInterval(int i)

int getMaxInactiveInterval()

HttpSession session = req.getSession(true);

//値の取得

String value = (XXX)session.getAttribute("key");

//値の保存

session.setAttribule("key", XXX); // 保存するobjectはシリアライズ可能

//値の削除

session.removeAttribute("key");

session.setAttribute("count", 10); × プリミティブ型

session.setAttribute("count", new Integer(10)); 〇

Integer count = (Integer)session.getAttribute("count");

getSession(true) セッションが存在しない場合は新規に作る。開始の画面用

getSession(false) セッションが存在しない場合はnullを返す。途中の画面用

HttpSession session = request.getSession();

if ( session.isNew() ) {

String id = session.getId();

Date date1 = new Date(session.getCreationTime());

Date date2 = new Date(session.getLastAccessedTime());

String interval = session.getMaxInactiveInterval();

...

} else {

session.invalidate(); // 終了

}

HttpSessionのシリアライズ処理は時間がかかるため、必要なければ

1.<%@ page session="false"%>

2.HttpSessionのinvalidate()でセッションをすべて破棄

3.セッションに重いデータを設定しない

4.短いタイムアウト時間を設定(単位:秒) session.setMaxInactiveInterval(10 * 60);

★生成するHTML内のリンクにセッションIDを埋め込む場合

PrintWriter out = res.getWriter();

...

out.print(res.encodeURL("/sample.jsp"));

out.print(res.encodeRedirectURL("/sample.jsp"));

★セッション機能の実現方法

1・URL Rewriting <a href="go.html;sessionID=xxx">リンク</a>

2・cookie HTTPプロトコルのヘッダを利用 ※cookieを扱わない場合もある

3・hidden <input type="hidden" name="sessionID" value="xxx"> ※Submitした時のみ

ちなみに、クッキーが扱えるかどうかの判断 HttpServletRequestのisRequestedSessionIdFromCookie()

ですから、URL Rewritingとcookieの併用で初回は両方ともクライアントへ送る

★sessionのタイムアウトを設定する方法

1.session.setMaxInactiveInterval(900); // (単位:秒)

2.web.xml(単位:分)

<session-config>

<session-timeout>1</session-timeout>

</session-config>

3.tomcatのconf/web.xml(単位:分)

<session-config>

<session-timeout>30</session-timeout>

</session-config>

※優先順位:1>2>3

JavaEE(Cookie)

一つのCookieの容量は4096バイト

一つのサーバがクライアントに発行できるCookie数は20個まで

public void saveCookie(String key, String value){

Cookie cookie = new Cookie(key, value);

cookie.setMaxAge(3600 * 24 * 7);

cookie.setMaxAge(0); // 消去という意味

response.addCookie(cookie);

}

public String getCookie(String key){

Cookie[] cookies = request.getCookies();

for(Cookie cookie : cookies) {

if(cookie.getName().equals(key))

return cookie.getValue();

}

return "";

}