JSP

[JSP] (6)쿠키와 세션

EunaSon 2022. 5. 8. 15:30

- 쿠키 (cookie)

서버측에서 클라이언트 측에 상태정보를 저장하고 추출할 수 있는 메커니즘으로, 클리이언트의 매 요청마다 웹 브라우저로부터 서버에게 전송되는 정보 패킷의 일종이며, 서버가 클라이언트에 전송하여 저장하는 텍스트 조각을 말한다.

HTTP에서 클라이언트의 상태 정보를 클라이언트의 하드디스크에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.

쿠키가 설정되는 원리:

1) 클라이언트가 웹 서버에 요청한다

2) 웹서버는 요청한 jsp 또는 서블릿을 통해 클라이언트에 쿠키 값을 전송한다.

3) 웹 브라우저는 전달받은 쿠키 값을 클라이언트에 저장한다.

 

쿠키가 설정된 이후에 서버는 요청 페이지의 내용을 응답한다.

클라이언트가 또다시 서버에게 요청할 때에는 요청 페이지의 정보와 쿠키 정보를 함께 웹 서버에게 전송하게 되고, 웹 서버에서 이 쿠키값을 전달받아 처리하여 결과를 클라이언트에게 응답한다.

쿠키값이 설정되면 언제든지 쿠키값을 얻어 사용할 수 있다.

 

jsp 페이지에서 클라이언트에 쿠키를 설정하기 위해서는 javax.servlet.jttp.Cookie 클래스를 사용한다.

cookie 클래스의 객체를 생성하고, 쿠키의 유효기간을 설정하여 response 내장객체의 addCookie() 메서드를 호출해주면 쿠키는 하드디스크에 저장된다.

서버가 클라이언트에 쿠키를 설정하는 절차:

1) Cookie 생성자로 쿠키 객체를 생성한다.

2) setMaxAge() 메서드로 쿠키 객체의 유효기간을 설정한다.

3) response 내장 객체의 addCookie() 메서드로 클라이언트에 전송한다.

 

- 쿠키 관련 주요 메서드

Coodie(name, value) : 쿠키 생성자

getDomail() : String 반환, 쿠키를 저장한 호스트의 도메인 반환

getMaxAge() : int 반환, 쿠키에 설정된 유효기간 반환

setMaxAge() : void, 쿠키의 최대 유효기간 설정. 초단위.

getName() : String 반환, 쿠키 이름 반환

getValue() : Stirng 반환, 쿠키 값 반환

setValue(String value) : void, 쿠키 값 설정

getComment() : String 반환, 저장된 쿠키의 주석 변환

setComment() : void, 쿠키에 주석 설정

 

 

쿠키 객체가 생성되면 쿠키를 사용할 수 있는 유효기간을 초단위로 환산하여 setMaxAge() 메서드로 설정한다.

쿠키 객체의 유효기간이 설정되면 response 내장객체의 addCookie() 메서드로 클라이언트에 전송하면 클라이언트의 하드디스크에 쿠키가 저장된다.

클라이언트에 쿠키를 전송하기 위한 일반 형식:

response.addCookie(객체명);

 

웹서버가 저장한 쿠키의 정보를 이용할 수도 잇다. 쿠키에 설정된 값을 얻으려면 request 내장객체의 getCookie() 메서드를 사용한다.

서버에서 클라이언트에 설정된 쿠키를 얻는 단계:

1) 쿠키 객체를 읽어온다.

2) 쿠키 객체에 설정된 속성값을 알아낸다.

 

request 내장객체의 getCookies() 메서드를 사용하면 설정된 모든 쿠키 객체들을 읽어올 수 있다.

읽어온 Cookie 객체의 속성값은 get---() 메서드를 사용해 알 수 있다.

 

클라이언트에 설정된 쿠키를 제거할 수도 있다. 제거하려면 setMaxAge() 메서드의 유효기간을 0으로 설정하고 response 내장객체를 이요해 클라이언트에 전송하면 된다.

 

 

- 세션

세션이란 클라이언트와 웹서버 간에 네트워크 연결이 지속적으로 유지되고 있는 상태를 말한다.

HTTP 특성상 클라이언트와 웹서버 간의 연결이 지속적으로 유지될 수 없다.

연결상태를 유지하기 위한 일반적인 방법으로 세션을 사용한다.

클아이너트가 웹서버에 요청하여 처음 접속하면 jsp 엔진은 요청한 클라이언트에 대해 유일한 ID를 부여하게 되는데, 이 ID를 세션ID라 부른다.

이 세션ID를 임시로 저장하여 페이지 이동시 이용하거나 클라이언트가 재접속 했을때 해당 클라이언트를 구분할 수 있는 유일한 수단이 된다.

세션ID는 다음과 같이 이용될 수 있다.

각각의 클라이언트에 유일한 세션ID를 부여하여 서로 다른 서버의 접근권한을 부여한다.

세션 객체마다 저장해둔 데이터를 이용하여 서로 다른 클라이언트의 요구에 맞는 서비스를 제공할 수 있다.

클라이언트 자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의 문제를 해결할 수 있다.

 

세션을 설정하기 위해서는 session 내장객체의 setAttribute() 메서드를 사용한다.

session.setAttribute(name, value);

 

문자형 세션 설정

String id = request.getParameter("id");

session.setAttribute("id", id);

 

정수형 세션 설정

Integer num = new Integer(100);

session.setAttribute("num", num);

 

 

- 쿠키와 세션의 비교

쿠키와 세션은 기능상 역할과 동작 원리가 비슷하지만 가장 중요한 차이점은 저장되는 곳이 다르다는 점이다.

쿠키는 클라이언트에 저장되고, 서버는 서버에 저장된다.

쿠키의 경우에는 서버의 자원을 전혀 사용하지 않지만, 세션의 경우에는 서버에 저장되기 때문에 서버의 자원을 사용할 수 있다.

종료되는 기간도 다르다.

 

>> 저장되는 곳

쿠키 : 클라이언트의 웹 브라우저가 저장하는 메모리 또는 하드디스크에 저장됨

세션 : 생성된 후 서버의 메모리에 저장됨.

클라언트 측에서 쿠키 사용을 하지 않도록 웹 브라우저를 세팅해놓으면 쿠키는 저장되지 않는다.

 

>> 종료 시점

쿠키 : 저장할 때 expires 속성을 정의해서 무효화되어 삭제될 날짜를 정확히 지정할 수 있다.

세션 : 클라이언트 측에서 로그아웃 하거나 설정한 시간동안 클라이언트 측의 반응이 없을 경우에만 무효화되므로 정확한 만료시점은 알 수 없다.

 

>> 리소스

쿠키 : 클라이언트 측에 저장되고, 클라이언트의 메모리를 사용하기 때문에 서버상의 자원을 쓰지 않는다.

세션 : 서버에 저장되고, 서버의 메모리로 로딩되기 때문에 세션이 생성될 때마다 그만큼의 자원을 차지하게 된다.

 

>> 용량제한

쿠키 : 클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있다. 따라서 쿠키로 인해 문제가 발생하지 않도록 하기 위해 한 도메인당 20개 총 300개, 그리고 하나의 쿠키당 4kb로 저장 용량을 제한해놓았다.

세션 : 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량 제한이 없다.

구 분 쿠  키 세  션
저장 위치 클라이언트 서버
저장 형식 텍스트 형식 Object 형
종료 시점 쿠키 저장시 설정
미설정 시 브라우저 종료시 소멸
정확한 시점 알 수 없음
자 원 클라이언트의 자원 사용 서버의 자원 사용
용량 제한 한 도메인 당 20개, 쿠키 하나당 4kb
총 300개
서버가 허용하는 한 용량에 제한 없음

 

'JSP' 카테고리의 다른 글

[JSP] (8)JSP 파일에서 자바빈 사용하기  (0) 2022.05.11
[JSP] (7)Java Beans 컴포넌트  (0) 2022.05.09
[JSP] (5)JSP Action 태그  (0) 2022.05.08
[JSP] (4)JSP 내장객체  (0) 2022.05.02
[JSP] (3)JSP의 이해  (0) 2022.04.27