쿠키 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를 보내서 서버가 어떤 세션을 사용할지 판단할 수 있게 한다.
세션 생성
내부 객체로 이미 제공되어 있어 객체 생성없이 바로 사용
'basic > jsp' 카테고리의 다른 글
[jsp] java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' 에러 (0) | 2021.06.10 |
---|---|
JSP[07] - 회원가입 사이트 만들기 (0) | 2021.06.09 |
JSP[05] - 커넥션 풀 Connection pool (0) | 2021.06.07 |
[JSP 실습] - 스크립트 요소(스크립트릿, 선언부, 출력문) (0) | 2021.06.04 |
JSP[04] - 자바빈즈 / useBean, setProperty , getProperty 액션태그 / JDBC (0) | 2021.06.04 |