HTTP 프로토콜의 연결 방식
웹 애플리케이션이 사용자의 요청에 따라 서비스를 제공하는 일련의 과정에는 HTTP 프로토콜이 그 중심에 있다.
HTTP 프로토콜을 사용한 웹 클라이언트와 웹 서버의 연결은 일회성 연결로, 웹 클라이언트로부터 전송되는 요청을 웹 서버에서 처리한 후 웹 클라이언트가 이에 대한 응답을 전달받는 순간 끊어진다.
따라서 HTTP 프로토콜을 이용한 웹 서버와 웹 클라이언트는 지속적인 연결을 통한 데이터 송/수신 을 할 수 없으며, 일회성 연결을 맺고 끊음을 반복적으로 수행하면서 통신하게 된다.
이러한 특성을 가진 HTTP 프로토콜은 연결을 유지하지 않는 프로토콜(stateless Protocol)로 분류된다.
연결을 유지시키지 않고 일회성 연결을 사용하는 HTTP 프로토콜은 동일한 기간에 보다 많은 요청을 수용할 수 있는 장점을 가지지만, 연결이 지속되지 않아 각각의 웹 클라이언트를 구분할 수 없다는 단점을 가진다.
JSP 에서는 이러한 HTTP 프로토콜의 일회성 연결에 따른 한계를 극복하기 위해 세션 관리를 위한 다양한 방법을 사용할 수 있다.
여기서는 URL rewriting 방식, Hidden Field 방식, 쿠키(Cookie), HttpSession 객체를 사용하는 방식을 살펴본다.
URL Rewriting
URL Rewriting 방식은 웹 서버와 웹 클라이언트의 연결 여부를 확인하기 위해 웹 페이지 이동 시 URL 주소에 세션 관련 정보를 추가하여 세션을 관리하는 방식으로 GET 방식을 이용하게 된다.
따라서 URL Rewriting 방식의 세션 관리는 다른 방식에 비해 상대적으로 구현이 간단하지만, GET 방식의 특성에 의해 아래와 같은 점을 고려해야 한다.
- URL의 길이에 제한이 있다.
- GET 방식을 이용하므로, 세션 관리가 필요한 모든 웹페이지로의 이동 시 세션 관리에 필요한 내용들을 이동할 URL에 추가시켜야 한다.
- GET 방식의 특성상 세션관리에 필요한 데이터가 URL 에 노출되므로 보안적 문제를 가진다
URL Rewriting 방식은 GET 방식을 이용하여 세션 관리를 위한 정보를 전송하므로, 입력했던 값이 파라미터에 지정되어 페이지 호출이 일어난다.
즉 유지되고 있는 로그인 정보를 URL Rewriting 방식으로 전송하여 로그인을 유지한다.
URL Rewriting 방식은 GET 방식을 활용하여 세션 관리 기능을 비교적 간단하게 구현할 수 있으나 세션 관리를 위해 웹 애플리케이션의 모든 웹 페이지가 세션 관리 데이터 유지에 관련된 코드가 반복적으로 작성되어야 한다는 점에서 제작 시 번거로움과 향후 웹 애플리케이션의 유지보수에 좋지 않은 영향을 끼칠 수 있다는 단점을 지닌다.
또한 URL 주소에 세션 관리에 관련된 데이터가 노출된다는 기본적인 위험 이외에도 세션 관리에 필요한 데이터를 알 고 있을 경우 URL 주소를 직접 입력하여 접근이 가능하다는 보안상에 단점이 있으므로, 보안상에 문제가 없는 간단한 데이터를 사용할 때에만 활용하는 것이 적합하다.
Hidden Field
Hidden Field 방식은 HTMP <input> 태그의 type 속성을 "hidden"값으로 지정하는 숨김 필드를 사용하는 방식이다.
Hidden Field 방식은 숨김 필드를 <form> 태그에 위치시키고 POST 방식을 사용하여 세션 관리 데이터를 전송하게 되므로 URL Rewriting 방식에 비해 구현 시의 제약사항이나 보안적인 면에서 약간의 장점을 가진다.
POST 방식은 GET 방식과 마찬가지로 <form>태그를 통해 특정 파라미터 데이터를 웹 서버에 전달할 때 사용되는 방식이지만, URL 주소에 파라미터의 이름과 값이 지정되는 것이 아니라 HTTP 요청 메시지에 데이터가 첨부되어 전송된다는 점에서 차이가 있다.
Hidden Field 방식은 POST 방식을 활용하여 세션 관리에 관련된 데이터가 URL 주소에 직접적으로 노출되지 않으므로 URL Rewriting 방식에 비해 보안상 조금 더 안전하며, HTTP 메시지에 데이터가 첨부되어 전송되므로 데이터의 길이에 제한이 없단느 장점이 있다.
Hidden Field 방식은 POST 방식을 통해 세션 관리 데이터를 전송하므로 데이터가 URL 주소에 노출되지 않아 GET 방식을 사용하는 URL Rewriting 방식에 비해 보안적 츠면에서 다소 개선됨을 확인할 수 있다.
그러나 POST 방식을 사용하는 Hidden Field 방식 역시 URL Rewriting 방식과 마찬가지로 웹 애플리케이션을 구성하는 매 페이지마다 관리를 위한 데이터 처리 구문을 반복 작성하여 정보를 유지하여야 하므로 구현상의 불편함은 해소하지 못한다.
또한 데이터를 파라미터로 전송 시 숨김 필드를 사용하더라도 웹 브라우저의 '소스 보기' 기능을 사용하면 데이터의 확인이 가능하므로 여전히 보안상의 위험을 내포하고 있다.
따라서 Hidden Field 방식 역시 웹 애플리케이션의 페이지 수가 많지 않고 보안상 문제가 없는 데이터에 한 해서 사용하는 것이 바람직하다.
쿠키(Cookie)
쿠키는 URL Rewriting 방식과 Hidden Field 방식처럼 매 페이지마다 서비스에 필요한 데이터를 처리하지 않고 웹 클라이언트 측 자원만을 사용하여 웹 서비스 요청 시 데이터를 첨부하여 전송한다.
따라서 쿠키를 사용하면 JSP 페이지의 세션 관리를 효과적으로 구현할 수 있다.
쿠키의 동작 방식
쿠키는 사용자가 특정 웹 사이트를 방문했을 때 서비스 사용에 피룡한 데이터를 웹 서버의 요청에 의해 사용자의 컴퓨터 내 저장한 후 웹 클라이언트가 서비스를 다시 요청할 때 첨부하여 웹 서버에 전송하는 방식으로 진행되며 동작 과정은 다음과 같다.
- 웹 클라이언트가 웹 서버로 서비스를 요청
- 웹 서버 측에서 요청에 대한 응답에 쿠키 정보를 첨부하여 전송
- 웹 브라우저는 웹 서버에게 전달받은 응답 내 쿠키를 종류에 따라 메모리나 파일에 저장
- 이후 웹 클라이언트가 쿠키가 저장된 웹 서버에게 다시 요청을 보낼 경우 쿠키의 정보를 첨부하여 웹 서버에 전달
위와 같이 쿠키는 웹 서버에 요청에 의해 생성되며 한 번 설정되면 웹 브라우저는 설정된 쿠키의 사용기간이 만료되어 삭제되기 전까지 웹 서버에 요청을 보낼 때 마다 쿠키로 설정한 데이터를 함께 전송하게 된다.
따라서 이러한 쿠키의 특성을 이용하면 웹 애플리케이션을 사용하는 동안 유지되어야 하는 특정 데이터를 효과적으로 사용할 수 있다는 장점이 있다.
쿠키 구성
쿠키를 구성하는 요소는 다음과 같이 쿠키의 이름과 값, 유효시간 및 도메인과 경로가 주요 요소이며, 이중 가장 중요한 속성은 쿠키의 이름과 쿠키의 값으로 볼 수 있다.
웹 브라우저가 가질 수 있는 여러개의 쿠키를 식별할 수 있는 구분 값으로 이름이 사용되며, 해당 이름에 지정할 값들을 통해 원하는 작업 수행이 가능함을 숙지해야 한다.
이름 : 쿠키를 식별하기 위한 구성요소
값 : 쿠키의 이름에 매칭되는 값
유효시간 : 쿠키가 유지(만료)되는 시간
도메인 : 저장된 쿠키를 전송할 도메인
경로 : 쿠키를 전송할 요청 경로
쿠키의 이름과 값을 설정할 때는 다음 RFC 2109 규약에 따른 제한 사항을 지켜야 한다.
쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.
콤머(,), 콜론(:), 세미콜론(;), 등호(=), 공백(' ') 등의 문자는 포함될 수 없다.
'$'로 시작될 수 없다
쿠키의 값이 바이너리(Binary) 값일 경우 BASE64 인코딩으로 처리해야 한다.
쿠키의 값은 콤마(.), 콜론(:), 세미콜론(;), 등호(=), 공백(' '), 괄호 ( () ) 등의 문자를 포함해야 할 경우 인코딩 처리가 필요할 수 있다.
JSP 페이지에서 쿠키를 설정하기 위해 서블릿 API의 Cookie 클래스를 사용할 수 있다.
웹 서버에서 웹 클라이언트로 전달되는 HTTP 헤더의 쿠기 설정 정보는 다음과 같은 형식을 가진다.
Set-Cookie : name=value; expire=date; domain=domain; path=path; secure
name : 쿠키의 이름을 지정
value : 쿠키이름에 매칭되는 값을 지정
expires : 쿠키의 만료 기간을 지정
domain : 저장된 쿠키의 요청 시 전송될 웹서버의 도메인을 지정
path : 쿠키가 전송될 웹 서버의 URL을 지정(URL이 유효할 경우만 쿠키를 전송)
secure : SSL과 같은 보안적 채널을 사용하는 경우에만 쿠키를 전송
HTTP 헤더에 설정된 쿠키의 정보는 앞서 보았던 쿠키의 구성요소와 대동소이함을 알 수 있다.
HTTP 헤더에 설정된 쿠키의 속성들 중 name 속성과 value 속성만 설정하면 기본적인 쿠키 사용이 가능하다.
쿠키의 만료 기간을 지정하는 expires 속성을 설정을 해주지 않을 경우 쿠키가 파일로 저장되지 않고 웹 브라우저가 종료되는 시점에 삭제된다.
만약 expires 속성에 특정 기간을 설정해준다면 웹 브라우저가 종료될 때 쿠키 파일을 생성하게 된다.
Cookie 클래스를 이용한 쿠키 생성과 사용
서블릿 API를 사용한 쿠키 설정은 java.servlet.Http.Cookie 클래스를 사용하며 간단하면서도 효율적인 쿠키를 생성하고 필요한 속성들을 지정해줄 수 있다.
JSP 페이지 및 서블릿 클래스 모두 동일한 방법으로 구현하며 아래와 같이 제작한다.
<%
Cookie cookie = new Cookie(name, value);
Response.addCookie(cookie);
%>
Cookie 클래스는 객체 생성과 동시에 쿠키의 이름과 값을 지정해 줄 수 있다.
생성한 Cookie 객체를 클라이언트로 전송하기 위해 response 내장 객체의 addCookie() 메서드를 사용하여 Cookie 객체를 첨부해주어야 한다.
이렇게 구현되어 전송된 쿠키는 웹 클라이언트에 저장되며 만약 동일한 이름의 쿠키가 웹 클라이언트에 먼저 저장되어 있는 경우, 현재 추가된 쿠키로 덮어 쓰여진다.
Cookie 클래스는 쿠키를 생성하는 것 이외에도 쿠키의 이름과 값 그리고 그 외의 여러 속성값들에 접근하기 위한 메서드를 제공한다.
getName() : String : 쿠키의 이름을 반환
getValue() : String : 쿠키의 값을 반환
setValue(String newValue) : void : 쿠키의 값을 지정
setDomain(String domain) : void : 쿠키가 전송될 서버의 도메인 지정
getDomain() : String : 쿠키가 적용될 도메인을 반환
setPath(String uri) : void : 쿠키를 전송할 경로 지정
getPath() : String : 쿠키가 적용될 전송 경로를 반환
setMaxAge(int expiry) : void : 쿠키의 유효시간을 초 단위로 지정
getMaxAge() : int : 쿠키의 유효 시간을 초 단위로 반환
JSP 페이지에서 쿠키를 생성하기 위해서는 Cookie 클래스를 사용한다.
쿠키의 값을 확인하기 위해서는 request 내장 객체의 getCookies() 메서드를 사용한다.
getCookies() 메서드를 사용하면 HTTP 요청을 통해 함께 전송되어 온 쿠키들을 Cookie 타입의 배열로 반환한다.
쿠키는 웹 페이지 내 <form> 태그를 이용한 파라미터 전달 방식을 사용하지 않고도 특정 데이터를 유지할 수 있는 매력적인 기능을 제공한다.
쿠키의 유효시간이 -1이면 쿠키의 지속시간이 지정되지 않았음을 의미한다.
지속시간이 지정되지 않은 쿠키는 웹 브라우저가 종료되면 자동으로 삭제된다.
쿠키를 생성할 때 쿠키의 이름과 값을 지정할 수 있다는 것을 알게되었다.
이렇게 생성한 쿠키의 구성요소 값이 어떠한 필요에 의해 변경되어야 할 경우 setValue() 메서드를 사용하여 기존 쿠키의 값을 변경시켜 줄 수 있다.
<form>태그에는 전송을 위한 파라미터를 지정하지 않았으나 Cookie 클래스를 사용하여 생성한 쿠키가 요청 페이지마다 전송되며, 이렇게 설정된 쿠키의 값은 Cookie 클래스가 제공하는 메서드를 사용하여 변경할 수 있다.
Cookie 클래스에서는 쿠키의 삭제 기능을 수행하는 메서드를 제공하고 있지 않아 일반적인 방법으로 클라이언트에 설정된 쿠키를 삭제할 수 없다.
따라서 쿠키의 삭제를 구현하기 위해서는 쿠키의 유효시간 설정에 사용되는 setMaxAge() 메서드에 쿠키의 유효시간을 0으로 지정하는 다소 편법적인 방식을 사용한다.
쿠키의 정보가 변경되었을 때는 response 내장 객체의 addCookie 메서드를 사용하여 재설정 해주어야 한다.
쿠키는 기본적으로 쿠키를 생성했던 웹 서버 측에 서비스를 요청할 때만 전송된다.
그러나 때때로 'www.testcookie.com'에서 생성된 쿠키를 'mail.testcookie.com' 등 동일 도메인을 사용하는 다른 서버에 적용해야 할 때도 있다.
이럴 경우 setDomain 메서드를 사용하면 생성된 쿠키가 전송될 숭 있는 도메인을 직접 지정해줄 수 있다.
setDomain 메서드를 사용하여 쿠키가 전송될 도메인을 설정할 때 입력 파라미터로 사용될 값은 아래와 같이 두 가지 형식이 가능하다.
www.testcookie.com : www.testcookie.com에만 가능
.testcookie.com : www.testcooke.com, mail.testcookie.com 등 관련도메인에 모두 적용
첫 번째 형식은 쿠키가 적용될 특정 도메인의 이름을 바로 지칭한 것으로 해당 주소로만 쿠키가 전송되게 된다.
두번째 형식과 같이 주솟값을 점'.'으로 시작하여 입력할경우 위에서 볼 수 있듯이 관련 도메인 모두 이 쿠키가 적용된다.
쿠키 적용 도메인 지정과는 반대로, 경우에 따라 도메인 내 특정 경로에만 쿠키가 전송되어야할 때도 있다.
이런 경우 Cookie 클래스의 setPath() 메서드를 사용하면 쿠키가 사용될 URL의 도메인 이후 주소의 특정 경로를 지정하고 결과적으로 쿠키가 사용될 경로를 제한시키는 기능 구현이 가능하다.
setPath() 메서드를 사용하여 특정 폴더를 쿠키 사용 경로로 지정할 수 있다.
Cookie 클래스의 다양한 기능들을 활용하면 URL Rewriting 방식이나 Hidden Field 방식에 비해 보다 효과적인 세션 관리 기능 구현이 가능하다.
쿠키는 사용방법에 따라 세션관리 기능 외에도 다양한 기능으로 활용할 수 있다.
그러나 쿠키의 기본 특성상 쿠키의 유효기간이 만료되기 전까지는 사용자의 컴퓨터에 정보를 보관하게 되므로 보안상으로 문제가 될 수 있는 정보나 노출을 희망하지 않는 데이터를 쿠키로 유지하지는 것은 권장되지 않는다.
따라서 쿠키의 사용 여부는 정보의 성격에 따라 신중이 결정해야 한다.
HttpSession
HttpSession 객체를 이용한 세션 관리는 서블릿 및 JSP를 사용하여 웹 애플리켕션 내 새션구현을 위한 여러 방식중 가장 강력하고 유용한 방식이다.
HttpSEssion 객체는 앞서 살펴본 쿠키 기술이 활용된 기술로 세션관리를 위한 다양한 기능들을 제공하며 웹 클라이언트의 자원만을 이용하는 쿠키와는 달리 세션관리를 위한 정보를 웹 서버가 생성하고 보관하여 관리한다는 점에서 차이를 보인다.
HttpSession의 동작
HttpSession은 기본적으로 요청으로 보내는 하나의 웹 브라우저에 하나의 세션 아이디를 부여하고 웹 컨테이너에서 해당 세션 아이디를 보관한다.
따라서 하나의 컴퓨터 내에서 두 개의 웹브라우저를 통해 동일한 웹 페이지에 접근하더라도 각각의 웹 브라우저는 다른 세션 아이디를 부여받아 각각의 세션이 유지된다.
HttpSession 객체를 이용한 세션은 아래와 같은 동작 과정을 거친다.
- 웹 클라이언트가 최초 서비스 요청(접속)
- 웹 컨테이너는 세션 아이디를 생성하여 부여
- 생성된 세션 아이디는 웹 클라이언트와 웹 서버 양측 모두 임시 저장
- 웹 클라이언트는 할당 받은 세션아이디를 쿠키에 임시 저장하거나 쿠키 미지원시 URL에 붙임
- 웹 서버는 생성된 세션 아이디를 메모리에 보관
- 웹 클라이언트는 다시 서비스 요청(접속)시 보유하고 있던 세션 아이디를 함께 전송
- 웹 서버는 세션 아이디가 저장된 메모리를 검색하여 유효한 세션 아이디인지 구분
- 웹 컨테이너에 보관된 세션 아이디는 유효기간 만료 시 소멸되며, 웹 브라우저가 부여받은 세션 아이디를 전송하여도 웹 컨테이너가 보유한 세션 아이디와 매칭되는 아이디가 없으므로 세션 종료
HttpSession은 웹 클라이언트의 자원만을 사용하여 특정 정보를 저장하는 쿠키와 달리 웹 컨테이너가 직접 생성하고 유지한다.
웹 서버가 각 웹 클라이언트와 세션을 구분하게 되며 JSP 페이지에서 session 내장객체로 제공되어 별다른 선언 없이도 사용이 가능하다.
session 내장객체의 사용
session 내장객체를 통해 세션 관리 기능을 사용하기 위해서는 아래와 같이 page 지시자의 session 속성을 true로 지정해주어야 한다.
<%@page session="true"%>
그러나 page 지시자의 session 속성값은 기본값이 true이므로 위와 같이 명시적으로 page 지시자의 session 속성값을 true로 지정하지 않아도 session 내장객체의 사용에는 문제되지 않는다.
JSP를 통해 구현하는 웹 서비스 대부분은 세션관리를 위해 session 내장 객체를 사용하므로 실질적으로는 생략하는 경우가 많다.
session 내장 객체가 제공하는 메서드를 보자.
session 내장객체에서 제공하는 메서드는 아래에서 볼 수 있듯이 대부분 세션 관리와 밀접한 연관이 있는 기능만을 제공하므로 비교적 심플한 편이다.
getAttribute(String name) : Object : session 객체에 저장된 속성을 반환
setAttrubute(String name, Object value) : void : session 객체에 속성을 저장
removeAttribute(String name) : void : session 객체에 저장된 속성을 제거
getId() : String : 세션 ID값을 반환
getMaxInactiveInterval() : int : 세션의 유효 시간을 반환
setMaxInactiveInterval(int interval) : void : 세션의 유효 시간을 설정
invalidate() : 현재 세션 정보를 제거
세션네 속성 지정
세션 아이디는 웹 클라이언트가 웹 브라우저를 통해 웹 서버에 접근할 때 생성되는 고유의 값으로 웹 컨테이너가 접속한 웹 브라우저를 구별하기 위해 직접 보관하는 값이며, 세션 관리와 연결의 지속성 측면에서 핵심이 되는 요소이다.
여기서 주목할 것은 세션 아이디가 매번 새로운 값으로 생성되어 할당된다는 것인데, 이러한 특성으로 인해 사용자가 이전에 웹 브라우저를 사용하여 어떤 웹 서비스를 이용하고 이후 동일한 웹 브라우저로 해당 웹 서비스에 접속한다 해도 이전에 할당받은 세션 아이디와 다른 값의 세션 아이디를 할당받게 되는 현상이 일어난다.
따라서 웹 애플리케이션을 사용중인 사용자들에게 개별적인 서비스를 제공하기 위해서는 세션 아이디 외에 사용자 구분을 위한 고정적인 데이터가 필요하여, 일반적으로는 웹 서비스에서 사용되는 로그인 아이디가 이러한 데이터의 대표적인 예라고 할 수 있다.
session 내장 객체는 다른 내장객체와 마찬가지로, 내장객체 내부에 애트리뷰트, 즉 속성의 이름과 값을 지정할 수 있으며 로그인 아이디와 같이 생성된 세션 아이디와 함께 유지되어야 하는 데이터를 저장하고자 할 때 유용하게 사용할 수 있다.
속성을 지정하기 위해서는 setAttribute()메서드를 사용하고, 설정한 속성값을 불러오기 위해서는 getAttribute()메서드를 사용하며, 다른 내장 객체가 가지는 동명 메서드들과 동일한 방법으로 사용할 수 있다.
setAttribute() 메서드를 사용하여 세션의 속성값을 이용하면 필요한 데이터를 저장할 수 있고, getAttribute() 메서드를 사용하여 저장한 데이터를 열람할 수 있으며, 필요시 removeAttribute()메서드를 사용하여 삭제할 수 있다.
removeAttribute() 메서드의 사용은 세션에 설정된 속성만을 제거한다는 점을 기억해야 한다.
속성의 삭제가 세션 아이디 삭제를 의미하는 것은 아니므로 removeAttribute() 메서드를 사용하여 지정된 속성을 제거하여도 세션 아이디에는 아무 영향이 없으며 세션을 통한 웹 서버와 웹 클라이언트 간의 연결 유지 역시 아무런 영향을 받지 않는다.
세션의 유효시간
session 내장 객체의 setMaxInterval() 메서드를 사용하면 현재 세션 아이디의 최대 유효시간을 설정할 수 있다.
이렇게 설정한 세션의 최대 유효시간이 지나면 최초접속시 할당된 세션이 무효화 되고, 다시 세션 연결이 확립되어야 한다.
session 내장객체 내 지정한 속성 역시 세션이 만료되면 사용할 수 없으므로 만약 속성에 로그인 아이디 값을 설정해두었을 경우 세션이 만료되면 재로그인이 필요하게 되는 것이다.
이러한 기능 구현은 인터넷 뱅킹, 웹 포털 사이트, 온라인 쇼핑물 등에서 사용자의 아무런 작업 요청이 발생하지 않을 경우, 자동 로그아웃이 되는 기능 구현에 적합하다.
유효시간은 초단위로 입력 가능하다.
세션이 만료되면 기존 세션에 지정된 모든 속성과 데이터들이 함께 소멸되어 확인할 수 없는 상태가 된다.
이러한 특성을 활용하면 if문과 같은 조건문을 사용하고 로그인 아이디의 존재 여부에 다라 다시 로그인을 요청하는 등의 기능 구현이 가능해진다.
세션의 종료
세션의 최대 유효시간 설정은 일정 시간 이후 세션의 자동 종료 기능 구현에 적합하다.
그러나 유효시간 설정은 세션의 만료 시점이 정해진 시간에 의존하기 때문에 즉시 세션을 해제해야 하는 로그아웃과 같은 기능 구현에 적합하지 않다.
세션은 기본적으로 웹 브라우저가 종료되는 시점에 즉시 소멸하지만, 이는 웹 서비스 사용을 위한 프로그램 자체를 종료시키는 행위이므로 엄밀히 따져보면 로그아웃 기능과는 다소 거리가 있다.
JSP 페이지 내부에서 웹 브라우저의 종료 여부와 관계없이 세션을 즉시 종료시키기 위해서는 session내장객체에서 제공하는 invalidate() 메서드를 사용하게 된다.
invalidate() 메서드는 웹 클라이언트가 부여받은 현재 세션의 즉시 종료를 수행한다.
session 내장객체를 사용한 세션 관리 기능 구현은 앞서 살펴본 URL Rewriting방식이나 Hidden Field방식 그리고 쿠키를 이용한 방식에 비해 구현이 간단하면서도 세션 관리에 필요한 모든 기능을 구현할 수 있고, 보안적인 측면에서도 더욱 안전한 방식으로 JSP 페이지 제작 시 세션 관리는 일반적으로 대부분 session 내장 객체를 활용하게 된다.
각각의 방식들은 구현 방식에 있어 다소 차이를 보이지만, HTTP 프로토콜이 가지지 못한 연결 지속성을 극복하기 위한 동일한 목적을 가진다.
일반적으로 세션관리는 session 내장객체를 가장 많이 사용하며 URL Rewriting 방식과 Hidden Field 방식의 경우 보안적인 약점으로 인해 상대적으로 잘 사용되지 않는 방식이라 볼 수 있다.
그러나 쿠키의 경우 session 내장객체를 이용한 방식과 상호보완적 관계에 있으며, 둘 중 하나의 방식이 나머지 방식을 대체하는 수단이 아니라 필요에 따라 각각의 방식을 선택하여 사용하거나 함께 사용하는 경우가 많으므로, 각각의 방식 모두를 잘 이해하여 웹 애플리케이션 구현 시 적절히 활용하는 것이 좋다.