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";
}
728x90
반응형
'JAVA HTML JAVASCRIPT > 소오스' 카테고리의 다른 글
[JAVA] 자바_스캐너(Scanner) (0) | 2021.04.24 |
---|---|
반복문(for문, while문, do-while문) (0) | 2021.04.24 |
자바 암호화와 복호화 (0) | 2021.04.23 |
JAVA SHA-256 암호화 방법 (0) | 2021.04.23 |
웹접근성을 향상시키기 위한 태그 속성을 알아보자~ (0) | 2021.04.21 |