728x90
Cookie | Session |
- 클라이언트(브라우저)의 메모리 또는 파일에 저장 - 클라이언트 로컬에 저장되어 보안에 취약 - 특히 파일로 저장되는 경우 탈취, 변조될 위험이 있고 Request/Response에서 스나이핑당할 위험이 있어 보안이 비교적 취약 - 지속 쿠키의 경우 브라우저 종료시에도 저장되어 있을 수 있음 - 쿠키에 정보가 있기 때문에 서버에 요청시 헤더를 바로 참조하면 되므로 속도에서 유리함 |
- 서버 메모리에 저장 - 클라이언트 정보 자체는 서버에 저장되어있으므로 비교적 안전함 - 서버에서 만료시간/날짜를 정해서 지워버릴 수 있기도하고 세션 쿠키에 세션 아이디를 정한 경우, 브라우저 종료시 세션아이디가 날아갈 수 있다. - 제공받은 세션ID(key)를 이용해서 서버에서 다시 데이터를 참조해야하므로 속도가 비교적 느림 |
🍪 Cookie
- 웹서버와 브라우저는 애플리케이션을 사용하는 동안 필요한 값을 쿠키를 통해 공유하여 상태를 유지함
- 사용자를 구분할 수 있는 방법이 필요하기 때문에 쿠키를 이용함
- HTTP는 비연결지향: 요청, 응답 과정이 끝나면 연결이 끊기기 때문에 사용자 확인이 어려움
- 쿠키 생성후, 요청 URL 날릴 때마다 URL(요청)에 해당하는 저장한 쿠키를 브라우저가 갖고 있다면 요청정보와 함께 쿠키를 서버로 보냄
- 사용자가 접속해서 들어옴 -> 서버가 사용자 이름을 기억하고싶음
- 서버 says "hey 브라우저야 사용자 이름 좀 저장해줘"
- 브라우저 says "ok 이름 쿠키에 저장할게"
- 브라우저가 사용자 이름을 쿠키에 저장함
- 브라우저 says "나 #@(F#%B)라는게 필요해~ 이거 하는데 필요한 쿠키 정보도 같이 보내줄게"
- 서버 says "근데 네가 누구야 아 쿠키 보내줬구나 까서 볼게~ 아하 저번에 온 사용자 A로군~"
구성요소
- 이름
- 값
- 유효시간(초)
- 도메인
- ex) www.somehost.com, .somehost.com
- 보안 때문에쿠키의 도메인이 쿠키를 생성한 도메인을 벗어나면 브라우저는 쿠키를 저장(생성) 하지 않는다.
- 설정 안 하면 톰캣 서버 기본정보
동작 방식
- 쿠키 생성 단계
- 생성한 쿠키를 응답 데이터의 헤더에 저장하여 웹브라우저에 전송
- 예시
- 1) 사용자가 request 날림
- 2) 서버가 response 하는 시점에 setCookieHeader라는 걸 통해서 response
- 3) 브라우저가 그 응답 header를 보고 '아 쿠키를 만들어야 하구나' 하고 쿠키를 만듦
- 쿠키 저장 단계
- 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관
- 쿠키 종류에 따라 메모리나 파일에 저장
- 쿠키 전송 단계
- 웹브라우저는 저장한 쿠키를 요청이 있을 때마다 웹서버에 전송(삭제되기 전까지)
- 사용자가 웹서버에 요청할 때마다, 요청한 url에 맞는 저장된 유효한 쿠키가 있는지부터 확인해서 그 쿠키를 요청 시에 함께 던짐
- ex) 책갈피 기능, 5페이지까지 읽었네 쿠키에 저장 나중에 오면 5페이지부터 펴져서 읽을 수 있음
- 웹서버는 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행
쿠키 설정
1. 쿠키 객체 생성
- Cookie cookie = new Cookie("key값", "value값");
- 사용 불가 문자: 공백, =,"/?@:;
- 쿠키값은 사용불가 문자를 제외한 나머지 아스키 문자 사용 가능
- 이외의 값(ex: 한글)을 사용 시에는 URL Encoder.encode()를 사용하여 인코딩 처리를 해준다.
2. 쿠키 최대 지속시간 설정
- cookie.setMaxAge(60*60*24)
- 24시간
- 초단위
- 지정하지 않으면 브라우저를 종료할 때 쿠키를 함께 삭제한다
3. 응답 헤더에 쿠키 객체를 추가
- response.addCookie(cookie);
- 응답 헤더를 통해서 브라우저에 전달하기 때문에 출력 버퍼가 플러시 된 이후에는 쿠키를 추가할 수 없다
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.
- 쿠키처럼 사라지지 않고 서버에 데이터를 저장
- 장: 쿠키를 사용할 때보다 보안이 향상된다.
- 단: 서버의 자원을 사용하기 때문에 속도 저하도 올 수 있음
- 세션은 세션 ID를 이용해 사용자(웹브라우저) 별로 구분하여 정보를 관리할 수 있다.
- 세션 객체에 접근하기 위해서는 session id가 필요
- session id를 key값으로 필요한 정보를 꺼내올 수 있음
- 로그인 시(= 사용자 요청 시) 사용자 별로 필요한 정보 저장 (ex 세션이 만료되었습니다. 재 로그인해주세요 할 때 보는 그 세션)
- 세션을 이용하지 않으면 상태 값이 저장되지 않음
- 새로고침 할 때마다 새로운 사람으로 인식
세션 생성 방법
- HttpSession session = request.getSession(boolean값);
- true: 세션 객체가 존재하지 않으면 새로 생성한다 (안 넣어도 true)
- false: 세션 객체가 존재하지 않으면 null을 리턴한다 (세션 유무 확인 시 쓰임)
세션 삭제 방법
- invalidate() 메서드 호출
- setMaxInactiveInterval(int interval) 메서드 호출
- 일정 시간(초) 동안 요청이 없으면 세션 객체 삭제됨
- web.xml에 <session-config> 설정하기 (분단위로 설정함.)
'IT EDU' 카테고리의 다른 글
[WAS] Was 개념 정리 (0) | 2022.03.29 |
---|---|
[Java] 자바 정규 표현식 (Pattern, Matcher) (2) | 2022.03.18 |
댓글