basic/jsp

JSP[06] - Cookie 쿠키, Session 세션

못지(Motji) 2021. 6. 8. 16:34

쿠키 Cookie

• 웹브라우저가 보관하는 데이터

• 웹사이트에 접속할때 생성되는 정보를 담은 임시 파일

• 비연결지향인 HTTP의 특징이자 약점을 보완하기 위해 사용된다

• 쿠키는 해당 클라이언트의 브라우저에 정보가 저장되는데 아이디, 패스워드, 브라우저정보, ip, 시간 등이 저장된다.

ex) 로그인시 로그인상태 유지, 스마트폰 카톡 자동로그인 등

 

☑ 쿠키의 2가지 방식

∘ 파일 쿠키 : 실제 파일로 남겨서 저장하는 방식

∘ 웹 쿠키 : 브라우저가 관리. 브라우저 종료되면 쿠키가 삭제됨

 

☑ 쿠키의 제약사항

∘ 문자열데이터만 가능

동작방식

쿠키는 웹서버와 웹브라우저 양쪽에서 생성 가능

브라우저
[쿠키저장소]
  웹서버
① 요청 —>  
  <—
(쿠키)
응답
② [쿠키저장소]
쿠키 저장
   
③ 요청 —>
(쿠키)
 

쿠키구성

  • 이름* : 각 쿠키를 구별하는데 사용하는 이름. 알파벳과 숫자.
  • 값* : 쿠키의 이름과 관련된 값
  • 유효시간* : 쿠키의 유지시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

쿠키생성

  • 쿠키를 사용하려면 먼저 Cookie 클래스를 사용하여 쿠키 객체를 생성해야함
  • 서버가 응답시, response 객체에 실려 사용자 브라우저에 저장됨
  • 정보 전달 방식은 Map (key, values) 형태

[쿠키 객체 생성]

Cookie cookie = new Cookie(String name, String value);

[쿠키 유효시간 설정]

cookie.setMaxAge(60); // 60초 동안 유지되게 설정

[response 객체에 쿠키 추가]

response.addCookie(cookie);

☑ 쿠키 클래스 메소드

리턴타입 메소드명 설명
String getName()📌 쿠키 이름 구하기
String getValue()📌 쿠키 값을 구하기
void setValue(String value) 쿠키 값 지정
void setDomain(String pattern) 이 쿠키가 전송될 서버의 도메인을 지정
String getDomain() 쿠키의 도메인 구하기
void setPath(String url) 쿠키의 전송 경로 저장
String getPath() 쿠키 전송 경로 구하기
void setMaxAge(int expiry)📌 쿠키의 유효기간을 초단위로 지정
음수로 지정 ▹ 웹브라우저를 닫을때 쿠키가 함께 삭제됨
int getMaxAge() 쿠키 유효기간 구하기

쿠키 값 읽어오기

1. 쿠키 객체 얻기

저장된 모든 쿠키 객체를 가져오려면 request 내장객체의 getCookies() 를 사용해야 한다.

Cookie[] request.getCookies();

2. 쿠키 객체의 정보 얻기

getName(), getValue() 메소드 사용

쿠키삭제

쿠키는 삭제하는 기능을 별도로 제공하지 않고, 쿠키의 유효시간을 만료하면 삭제됨

cookie.setMaxAge(0);
response.addCookie(cookie);

세션 Session

• 클라이언트와 웹서버간의 상태를 지속적으로 유지하는 방법

• 서버는 세션을 사용해서 클라이언트 상태를 유지할 수 있기 때문에 주로 로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용한다.

• 세션은 웹서버에서만 접근이 가능하므로 브라우저와 서버의 상태 유지가 훨씬 안정적이고 보안유지에 더 유리하며 데이터 저장하는데 한계가 없다.

• 간혹, 웹브라우저에서 쿠키를 지원하지 않을 경우나 강제적으로 쿠키를 막을 경우 세션은 상관없이 사용가능

• 세션은 여러 서버에서 공유할 수 없다

ex) www.daum.net의 세션과  mail.daum.net의 세션은 다르다. 

• 웹컨테이너에서 세션컨테이너가 존재하며 기본적으로 한 웹브라우저마다 한 세션을 생성하여 사용자의 구분단위가 된다.

• 한 브라우저에서 여러 jsp 페이지를 설정해도 하나의 세션을 사용, 같은 페이지라도 브라우저에 따라 서로 다른 세션을 사용

• 세션을 사용하면 클라이언트가 웹서버의 세션에 의해 가상으로 연결된 상태가 되며 웹브라우저를 닫기 전까지 웹페이지를 이동하더라도 사용자의 정보가 웹서버에 보관되어 있어 사용자의 정보를 잃지 않는다.

• 쿠키와 마찬가지로 세션도 생성을 해야 정보를 저장할 수 있고, jsp 페이지에서는 세션 기능을 사용할 수 있도록 session 내부객체를 생성해 제공해주고 있다.

 

💡 쿠키와 세션의 차이점은 어디에 정보를 저장하느냐의 차이

쿠키 : 웹브라우저에 사용자 정보 저장 (클라이언트측 사용자 정보 보관소)

세션 : 웹서버쪽의 웹컨테이너에 정보를 저장 (서버측 사용자 정보 보관소)

 

☑ session 내부객체 메소드

리턴타입 메소드명 설명
void setAttribute(String name, Object value) 세션에 속성이름이 name인 value 값을 추가
Object getAttribute(String name) 세션의 속성이름이 name인 value 값을 리턴
Enumeration getAttributeNames() 세션의 속성이름들 리턴
long getCreationTime() 세션이 생성된 시간 리턴
String getId() 세션에 할당된 고유 아이디를 리턴
long getLastAccessedTime() 해단 세션에 마지막으로 접근한 시간 리턴
void removeAttribute(String name) 속성이름이 name인 세트 삭제
void invalidate() 현재 세션에 저장된 모든 속성 제거

세션 내부 객체

  • session은 request 내부객체와 마찬가지로 satAttribute(), getAttribute() 등 메소드 사용 가능
  • 웹브라우저마다 별도의 세션을 갖는다고 했는데 이러한 각 세션을 구분하기 위해 세션마다 고유 ID를 할당하는데 이를 세션 ID라 한다.
  • 웹서버는 웹브라우저에 세션 ID를 기본적으로 전송(쿠키 : JSESSIONID)해주고 웹브라우저는 웹서버에 연결할때마다 매번 세션 ID를 보내서 서버가 어떤 세션을 사용할지 판단할 수 있게 한다.

세션 생성

내부 객체로 이미 제공되어 있어 객체 생성없이 바로 사용