Session management

3442 단어
HttpSession은 같은 클라이언트가 보내는 여러 Request에 대응합니다.
1. SessionID
서버는 SessionID를 통해 request가 같은 클라이언트에서 왔는지 확인합니다.클라이언트가 보낸 Requst를 처음 받았을 때, Container는 SessionID를 생성하고response와 함께 클라이언트를 보내고, 클라이언트가 다음 요청을 보낼 때 SessionID를 서버에 보내고, Container는 받은 SessionID를 기존 Session의 SessionID와 일치시킵니다.
1、Cookies 
Cookies는 간단하게 SessionID를 보내는 방법입니다.Container가 Cookies를 통해 ID를 보낼 때response header에는 Set-Cookie:JSESSIONID=1231231항이 있고 고객이 보낸 request header에도 Cookie:JSESSIONID=1231231항이 있습니다.
HttpRequest 를 사용합니다.getSession()은 자동으로 response에 Cookie:JSESSIONID를 추가하고 HttpSession을 사용합니다.isNew()는 세션이 새 것인지 여부를 판단할 수 있습니다. 세션에 일치하는 ID가 없을 때 새 것으로 간주하고true로 돌아갑니다.이전 세션을 얻으려면 HttpRequest를 사용하십시오.getSession(false), 오래된 Session이 없으면null로 돌아갑니다.
HttpRequest를 통해 Session을 얻는 것 외에 이벤트 클래스 Session Event에도 getSession () 방법이 있기 때문에 Session Event와 하위 클래스 Session Binding Event를 통해 HttpSession을 얻을 수 있고 Even class는 Listener 방법에 자주 등장한다.
2、URL Rewriting
클라이언트가 쿠키를 받아들이지 않을 때response 헤더의 Set-Cookie 항목을 무시하기 때문에 쿠키로 JSESSIONID를 전송할 수 없습니다.
URL 다시 쓰기는 URL 뒤에 JSESSIONID,response를 추가합니다.encodeURL("URLstring").URL Rewriting은 쿠키를 사용할 수 있을 때 쿠키를 우선적으로 사용하는 대체 방식입니다.
sendRedirect()와 함께 사용하고,sendRedirect(response.encodeURL("URLString");
2. Session 종료
응답을 사용하면.getSession () 시 implements HttpSession의 Object를 얻을 수 있습니다. 실례화는container에서 이루어집니다.HttpSession의 setMaxInactiveInterval(int time) 방법은 리퀘스트의 최대 간격(초 단위)을 두 번 설정하고 시한을 초과하면 세션을 끝냅니다.invalidate () 방법은 세션을 직접 끝냅니다.웹에서도 가능합니다.xml에서 모든 세션에 두 번 request의 최대 간격을 설정합니다. setMax Inactive Interval(int time)과 효과는 같지만 분 단위입니다.


...
 
15


3. 쿠키의 기타 응용 프로그램
쿠키는 클라이언트와 서버 간에 교환되는name/value 쌍입니다. 그 중에서name/value는 모두 String 형식입니다.서버는 클라이언트에게 쿠키를 보내고 클라이언트는 쿠키를 받은 후 다음 요청에 이 쿠키를 보냅니다.
기본적으로 세션이 끝나면 쿠키도 효력을 상실하지만 클라이언트에 일정 시간 저장하도록 쿠키를 설정할 수 있습니다.
쿠키 관련 API:
HttpServletRequest.getCookies();HttpServletResponse.addCookies();그리고javax.servlet.http.Cookie
// Cookie
Cookie cookie = new Cookie("StringName","StringValue");
// cookie , , -1 session 
cookie.setMaxAge(intSeconds);
// cookie
response.addCookie(cookie);
// Cookies, Cookie Array , Cookie 
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals(“username”)) {
String userName = cookie.getValue();
out.println(“Hello “ + userName);
break;
}
}

4. Session의 라이프 사이클
몇 가지 중요한 순간: Session 생성, Session 실효, Session Attribute 교체, 제거(remove Attribute () 또는 새 Attribute 추가;분산 앱에서 세션은 한 JVM에서 다른 JVM으로 전달될 수 있습니다. 전송되기 전에 세션은 현재 JVM에서 둔화되고 대상 JVM으로 전달되면 세션이 활성화됩니다.
관련 Listener:
Session 생성, Session 실효: HttpSessionListener(HttpSessionEvent)
Session Attribute가 교체, 제거(removeAttribute()되거나 새 Attribute: HttpSessionAttributeListener(HttpSessionBinding Event) 추가됨
전달에 앞서 Session은 현재 JVM에서 둔화되며, 대상 JVM에 전달되면 Session 활성화: HttpSessionActivationListener(HttpSessionEvent)
: HttpSessionActivationListener는 HttpSessionBindingListener와 마찬가지로 Attribute class implements에 적용될 수 있습니다.
HttpSessionEvent.getSession()
HttpSessionBindingEvent.getSession();HttpSessionBindingEvent.getValue () 는 이벤트를 트리거하는 Attribute 값을 반환합니다. 물론 이벤트 발생 이전의 값만 반환합니다.HttpSessionBindingEvent.getName () 은 이벤트를 트리거하는 Attribute 이름을 반환합니다.

좋은 웹페이지 즐겨찾기