Session management
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 이름을 반환합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.