쿠키와 세션

ikyeong·2023년 5월 23일
0

Spring-Study

목록 보기
7/9

01. 쿠키

이름과 값의 쌍으로 저장된 정보

  • 서버에서 만들어 브라우저에서 저장
  • 유효기간이 존재하고 유효기간 이후 자동 삭제

📌 쿠키의 작동 과정

  1. 서버에서 Cookie cookie = new Cookie("name","value") 로 쿠키 생성
  2. response.addCookie(cookie)로 쿠키를 응답헤더에 추가
  3. 브라우저에서 응답을 받으면 쿠키가 브라우저에 저장
  4. 브라우저에서 요청을 보낼때 요청헤더를 통해 쿠키 전송

💡 쿠키를 통해 서버에서 클라이언트를 식별할 수 있다!!


📌 쿠키 생성 & 삭제 & 변경

  • 쿠키 생성
Cookie cookie = new Cookie("id","asdf");//쿠키 생성
cookie.setMaxAge(60*60*24);				//유효기간 설정(초 단위)
response.addCookie(cookie);				//응답에 쿠키 추가

[응답헤더]
Set-Cookie: id=asdf; Max-Age=86400; Expires=Tue, 16-Nov-2021 11:12:15 GMT
//Max-Age는 상대시간 유효기간, Expires는 절대시간 유효기간
//서버와 클라이언트 사이의 시간이 일치하지 않을수도 있기때문에 상대시간이 더 유리하다.
  • 쿠키 삭제
Cookie cookie = new Cookie("id","");	//삭제할 쿠키와 같은 이름의 쿠키 생성
cookie.setMaxAge(0); 					//유효기간을 0으로 설정
response.addCookie(cookie);				//응답에 쿠키 추가
  • 쿠키 변경
Cookie cookie = new Cookie("id","");	//변경할 쿠키와 같은 이름의 쿠키 생성
cookie.setValue(URLEncoder.encode("..."));//값 변경
cookie.setDomain("...");				//도메인 변경
cookie.setPath("...");					//경로 변경
cookie.setMaxAge(...); 					//유효기간 변경
response.addCookie(cookie);				//응답에 쿠키 추가

📌 쿠키 읽기

Cookie[] cookies = request.getCookies();//쿠키 읽기 (쿠키가 없다면 null반환)

for (Cookie cookie : cookies){
	String name = cookie.getName();
    String value = cookie.getValue();
    ...
}

//@CookieValue 어노테이션으로 쿠키 읽기
public String login(@CookieValue("name") String cookieValue){...}

02. 세션

관련된 요청과 응답들의 모음

  • 기존의 독립적인 요청에서 쿠키를 이용해 세션 ID를 전달해 같은 세션 ID를 가진 요청은 같은 세션에 포함
  • 브라우저마다 세션 객체(개별저장소)를 서버에서 제공

💡 로그인부터 로그아웃까지가 하나의 세션

❔ 브라우저에서 쿠키를 차단한 상태라면?

-> URL에 GET Method로 세션 ID를 추가해준다! (form에 action="<c:url value='...'/>"로 설정해줘야 URL에 세션 ID가 자동 추가된다)


📌 세션 객체 생성

HttpSession session = request.getSession(); //쿠키의 세션 ID를 보고 
											//서버에서 일치하는 세션을 찾음

📌 세션 종료

  • 수동 종료
HttpSession session = request.getSession();
session.invalidate();					//1. 세션 즉시 종료
session.setMaxInactiveInterval(30*60);  //2. 세션 예약 종료 (초단위)
  • 자동 종료 (web.xml)
<session-config>
  <session-timeout>30</session-timeout> //분단위
</session-config>

📌 세션 관련 메서드

메서드설명
String getId()세션 ID 반환
long getLastAccessedTime()최근 요청을 받은 시간 반환
boolean isNew()새로 생성된 세션인지 반환
void invalidate()세션 객체 제거(logout)
void setMaxInactiveInterval(int interval)지정 시간 이후 세션 종료
int getMaxInactiveIterval()예약 종료 시간 반환

📌 쿠키 vs 세션

쿠키세션
브라우저에 저장서버에 저장
서버부담X서버부담O
보안 불리(쿠키의 값은 암호화되어 저장)보안 유리
서버 다중화에 유리서버 다중화에 불리(큰 사이트에서는 대부분 쿠키 이용)

0개의 댓글