본문 바로가기

JAVA HTML JAVASCRIPT/소오스

쿠키와 세션

728x90
반응형

1. 쿠키와 세션

개념

  • 쿠키
    • 사용자 컴퓨터에 저장
    • 저장된 정보를 다른 사람이나 시스템이 볼 수 있음
    • 유효기간이 지나면 사라짐
  • 세션
    • 서버에 저장
    • 서버가 종료되거나 유효기간이 지나면 사라짐

동작 과정

1) 쿠키

출처 : https://www.edwith.org/boostcourse-web/lecture/16799/2) 세션

출처 : https://www.edwith.org/boostcourse-web/lecture/16799/

구현

1) 쿠키

쿠키는 javax.servlet.http.Cookie 에 (키, 값) 형태로 구현되어 있다.

// 서버에서 쿠키 생성 
Cookie cookie = new Cookie(키, 값); 

// 클라이언트가 보낸 쿠키 읽기 (방법 1) 
Cookie[] cookies = request.getCookies(); 
if(cookies != null) { 
	for(Cookie cookie : cookies) { 
		if("key".equals(cookie.getName())) { 
			find = true; value = cookie.getValue(); 
		} 
	} 
} 
    
    
// 클라이언트가 보낸 쿠키 읽기 (방법 2, Spring MVC) 
@CookieValue(value="key", defaultValue="1", required=true) 
String value 
    
// 쿠키 삭제 요청(0) 혹은 유지 기간 설정. 초 단위. 
cookie.setMaxAge(0); 

// 경로 이하에 모두 쿠키 적용. 
cookie.setPath("/"); 

// 응답에 쿠키 넣어주기 
response.addCookie(cookie);

예를 들어, 다음과 같이 사용이 가능하다.

@GetMapping(path="/list") 
public String list(... @CookieValue(value="count", defaultValue="0", required=true) String value, HttpServletResponse response) { 
	
    // 쿠키가 있는 경우, 없는 경우 처리 
    try { 
    	int i = Integer.parseInt(value); 
        value = Integer.toString(++i); 
    } catch (Exception e) { 
    	value = "1"; 
    } 
    
    
    // 쿠키 갱신하여 Response 에 추가 
    Cookie cookie = new Cookie("count", value); 
    cookie.setMaxAge(60*60*24*365); 
    
    
    // 1년으로 설정
    cookie.setPath("/"); 
    response.addCookie(cookie);
    
    ... 
}

세션은 javax.servlet.http.HttpSession 에 (키, 값) 형태의 오브젝트로 구현되어 있다.
즉, 쿠키는 단일 키와 값(String)만 담는 반면, 세션은 여러 키로 여러 개의 값(Object)을 담을 수 있음.

// 세션 생성 및 얻기 (방법 1) 
	
    // 1) 서버에 생성된 세션이 있다면 세션을 반환하고 없다면 새롭게 세션을 생성하여 반환
	HttpSession session = request.getSession(); 
    
	// 2) 이미 생성된 세션이 있다면 반환하고 없으면 null을 반환 
	HttpSession session = request.getSession(false); 
    

// 세션 생성 및 얻기(방법 2, Spring MVC) 
	
    @SessionAttribute("user") User user 
    
    // 세션에 데이터 저장, 삭제 
    session.setAttribute(키, 값); 
    session.removeAttribute(키, 값); 
    
    // 세션 내 데이터 읽기 
    String value = (String) session.getAttribute("id"); 
    
    // 반환 값은 Object 유형

세션 유지 시간은 web.xml 파일에서 설정해야함.
따로 설정하지 않을 경우, 기본 값은 30분임.

<session-config> 
	<session-timeout>30</session-timeout> 
</session-config>

예를 들어 다음과 같이 사용이 가능하다.

@GetMapping("/guess") 
public String guess(... HttpSession session) { 
	session.setAttribute("count", 0); 
    session.setAttribute("randomNumber", (int)(Math.random()*100)+1);
    
    ... 
    
    int count = (Integer)session.getAttribute("count"); 
    int randomNumber = (Integer)session.getAttribute("randomNumber");
    
    ...
}

한편, Spring @SessionAttribute 어노테이션을 사용한 예는 다음과 같다.

@GetMapping("/info") public String userInfo(@SessionAttribute("user") User user) { ... return "user"; }

@GetMapping("/info") 
public String userInfo(@SessionAttribute("user") User user) {
	... 
	return "user"; 
}

 

출처 : dailyheumsi.tistory.com/159#recentEntries

728x90
반응형