tomcat 7 에서 session 실현
세 션 은 단지 하나의 개념 일 뿐 입 니 다. "Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user."
클 라 이언 트 브 라 우 저 와 이 SessionId 의 정 보 를 어떻게 교환 하 는 지, 많은 책 들 이 세 가지 방식 을 언급 했다. 쿠키, URL 재 작성 과 폼 숨 기기
tomcat 에서 session 의 실현
org. apache. coyote 패키지 의 Coyote 프레임 워 크
Coyote 는 Tomcat 의 HTTP Connector 프레임 워 크 로 밑 에 있 는 socket 을 처리 하고 http 요청, 응답 등 바이트 흐름 차원 의 것 을 Request 와 Response 두 종류 로 봉 하여 용기 에 사용 하도록 합 니 다.또한, 우리 가 작성 한 servlet 이 ServletRequest 를 얻 을 수 있 도록 Tomcat 은 Facade 모드 를 사용 하여 바 텀, 저급한 Request 를 ServletRequest 로 포장 합 니 다 (이 과정 은 보통 Wrapper 용기 1 급 에서 발생 합 니 다).
따라서 Coyote 는 본질 적 으로 tomcat 의 용기 에 바 텀 socket 연결 데이터 에 대한 패 키 징 을 제공 하여 Request 류 형식 으로 용기 가 끝까지 의 데 이 터 를 접근 할 수 있 도록 합 니 다.그리고 연결 탱크, 스 레 드 탱크 등 socket 과 직접 접촉 하 는 일 에 대해 tomcat 는 org. apache. tomcat. util. net 가방 의 류 에 맡 겼 습 니 다.Tomcat 은 기본적으로 두 개의 Http 프로 토 콜 을 지원 합 니 다: HTTP 1.1 과 AJP.
CoyoteAdapter 역할: Adapter 는 Tomcat 커 넥 터 와 용기 Container 를 연결 합 니 다. 이 구현 클래스 는 CoyoteAdapter 가 주로 요청 을 봉인 하고 Request 와 Response 대상 을 구성 하 며 요청 을 Container 즉 Servlet 용기 에 전달 합 니 다.
Request 와 Response
Request 는 Coyote 프레임 워 크 의 핵심 클래스 로 거의 모든 connector 와 용기 에 사 용 됩 니 다.
Request 클래스 는 기본 http 바이트 흐름 에 대한 패 키 징 을 실현 합 니 다. http 는 본질 적 으로 네트워크 에서 온 바이트 흐름 이 고 논리 적 으로 http 프로 토 콜 에 따라 머리 와 몸 으로 나 뉘 는데 그 중에서 머리 에 많은 필드 (MIME 필드 포함) 가 있 기 때 문 입 니 다.Request 의 역할 은 이 바이트 들 을 대응 하 는 필드 로 봉 하고 처리 효율 이 가장 좋 은 것 이다.따라서 Request 의 대부분 방법 은 필드 의 get 방법 (set 방법 이 많 지 않 습 니 다. 대부분의 필드 는 바 꿀 수 없 기 때 문 입 니 다) 이 고 Response 류 는 정반 대 입 니 다.휴지통, inputbuffer 등 용기 에 사용 할 수 있 는 방법 도 제공 된다.
Coyote Adapter 와 같은 session 쿠키 와 관련 된 방법:
protected void parseSessionCookiesId(Request req, Request request)
Parse session id in URL.
protected void parseSessionSslId(Request request)
Look for SSL session ID if required.org.apache.tomcat.util.http.ServerCookie
server - side cookie representation. 서버 쪽 쿠키 의 표시 라 는 뜻 입 니 다.
//////////////////////////////////////////////////////////
= = = = = = = = 위 에서 알 아 보기 = = = = = = = = = = = = = =
getSession 때 requestSessionId 를 통 해 찾 은 session 입 니 다. requestSessionId 값 은 어떻게 됩 니까?이것 은 분명히 Session 구현 메커니즘 의 쿠키 나 URL 재 작성 을 통 해 설 정 된 것 입 니 다.
org. apache. catalina. connector. CoyoteAdapter 클래스 의 방법 parseSessionCookiesId (org. apache. coyote. Request req, Request request) 의 원본 코드:
(코드 는 이 층 만 보 입 니 다)
// Parse session id from cookies
// A collection of cookies - reusable and tuned for server side performance.
Cookies serverCookies = req.getCookies();
//
int count = serverCookies.getCookieCount();
if (count <= 0) {
return;
}
String sessionCookieName = SessionConfig.getSessionCookieName(context);
for (int i = 0; i < count; i++) {
//Server-side cookie representation. cookie
ServerCookie scookie = serverCookies.getCookie(i);
if (scookie.getName().equals(sessionCookieName)) {
// Override anything requested in the URL
if (!request.isRequestedSessionIdFromCookie()) {
// Accept only the first session id cookie
convertMB(scookie.getValue());
request.setRequestedSessionId
(scookie.getValue().toString());
request.setRequestedSessionCookie(true);
request.setRequestedSessionURL(false);
if (log.isDebugEnabled()) {
log.debug(" Requested cookie session id is " +
request.getRequestedSessionId());
}
} else {
if (!request.isRequestedSessionIdValid()) {
// Replace the session id until one is valid
convertMB(scookie.getValue());
request.setRequestedSessionId
(scookie.getValue().toString());
}
}
}
}
위의 코드 에서 request SessionId 는 쿠키 나 재 작성 한 URL 에서 얻 은 것 으로 분석 할 수 있 습 니 다.
request.setRequestedSessionId(scookie.getValue().toString());
tomcat 7 의 기본 sessionId 이름 입 니 다.
public class SessionConfig {
private static final String DEFAULT_SESSION_COOKIE_NAME = "JSESSIONID";
private static final String DEFAULT_SESSION_PARAMETER_NAME = "jsessionid";
/**
* Determine the name to use for the session cookie for the provided
* context.
* @param context
*/
public static String getSessionCookieName(Context context) {
String result = getConfiguredSessionCookieName(context);
if (result == null) {
result = DEFAULT_SESSION_COOKIE_NAME;
}
return result;
}
/**
* Determine the name to use for the session cookie for the provided
* context.
* @param context
*/
public static String getSessionUriParamName(Context context) {
String result = getConfiguredSessionCookieName(context);
if (result == null) {
result = DEFAULT_SESSION_PARAMETER_NAME;
}
return result;
}
private static String getConfiguredSessionCookieName(Context context) {
// Priority is:
// 1. Cookie name defined in context
// 2. Cookie name configured for app
// 3. Default defined by spec
if (context != null) {
String cookieName = context.getSessionCookieName();
if (cookieName != null && cookieName.length() > 0) {
return cookieName;
}
SessionCookieConfig scc =
context.getServletContext().getSessionCookieConfig();
cookieName = scc.getName();
if (cookieName != null && cookieName.length() > 0) {
return cookieName;
}
}
return null;
}
private SessionConfig() {
// Utility class. Hide default constructor.
}
}
한 마디 로 하면 tomcat 는 먼저 requestSessionId 를 받 아야 합 니 다. 이 requestSessionId 는 클 라 이언 트 브 라 우 저 에서 제출 한 쿠키 나 재 작성 한 Url 에서 얻 은 것 입 니 다.
======================END======================
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.