Spring
-
쿠키와 세션
-
쿠키와 세션의 공통 개념
- 쿠키와 세션은 상태를 유지하는 '상태유지기술'들이다.
- 쿠키의 경우 클라이언트단에 저장한다.
- 세션의 경우 서버단에 저장한다.
- 둘다 유효기간을 설정 가능.
- 쿠키는 다른 사람들이 볼 수 있다는 단점.
- 쿠키와 세션의 동작 원리
-
- 쿠키의 제한 사항.
- 브라우저별로 제한을 둠. 사이트별로 20개, 모든 사이트 합 300개. 이런 식.
- 크기도 제한을 두고 있음.(4K byte)
-
Spring에서의 쿠키 사용법
-
문법(Syntax)
(@CookieValue(Value="쿠키이름", required = false, defaultValue = "기본값")String 변수명)
-
쿠키 생성하고 response에 담기
- 쿠키는 (이름, 값)의 쌍 정보를 입력하여 생성.
- 쿠키의 이름은 일반적으로 알파벳과 숫자, 언더바로 구성.
Cookie cookie = new Cookie(이름, 값); response.addCookie(cookie);
-
클라이언트가 보낸 쿠키 정보 읽기
Cookie[] cookies = request.getCookies();
-
쿠키의 유지시간 설정법 및 쿠키 삭제하는 법.
Cookie cookie = new Cookie(이름, 값); cookie.setMaxAge(0); // 쿠키 삭제. or cookie.setMaxAge(10 * 60); //쿠키 유지시간 10분. (단위 : 초) response.addCookie(cookie);
-
-
Cookie의 사용
-
Cookie 어노테이션 없이 쿠키를 사용
(... HttpServletRequest request, ...) //위와 같이 메소드의 인자를 추가. Cookie[] cookies = request.getCookies(); String value = null; boolean find = false; if (cookies != null) { for (Cookie cookie : cookies) { if ("count".equals(cookie.getName())) { find = true; value = cookie.getValue(); } } } //위의 경우 cookie가 없는 경우. 즉 처음 접속한 경우. if (!find) { value = "1"; } else { //else 문 안은 cookie가 있는 경우. try { int tempValue = Integer.parseInt(value); value = Integer.toString(++tempValue); } catch (Exception e) { value = "1"; } } Cookie cookie = new Cookie("count", value); //위와 같이 "name", value(String) 형태로 쿠키를 만듦.
-
Cookie 어노테이션을 이용하여 쿠키 사용
//이제 HttpServletRequest는 필요없음. @CookieValue(value = "count", required = true, defaultValue = "0") String value //메소드의 인자로 위를 추가. //쿠키값은 항상 String임 try { int tempValue = Integer.parseInt(value); value = Integer.toString(++tempValue); } catch (Exception e) { value = "1"; } Cookie cookie = new Cookie("count", value);
-
cookie의 생명시간 설정 및 경로 설정
cookie.setMaxAge(60 * 60 * 24 * 365); cookie.setPath("/");
-
cookie를 클라이언트에게 보내기
response.addCookie(cookie);
전체 코드 (이전 학습 내용이 섞여 있음) :@Controller public class GuestbookController { @Autowired GuestbookService guestbookService; @GetMapping(path = "/list") public String list( @RequestParam(name = "start", required = false, defaultValue = "0") int start, ModelMap model, /*HttpServletRequest request*/ @CookieValue(value = "count", required = true, defaultValue = "0") String value , HttpServletResponse response) { // start로 시작하는 방명록 구하기 List<Guestbook> list = guestbookService.getGuestbooks(start); // 전체 페이지 수 구하기 int count = guestbookService.getCount(); int pageCount = count / GuestbookService.LIMIT; if (count % GuestbookService.LIMIT > 0) pageCount++; // 페이지의 수만큼 start의 값을 리스트로 저장 // 예를 들면 page의 수가 3이면 // 0, 5, 10 이런 식으로 저장이 된다. // jsp에서는 list?start=0, list?start=5, list?start=10 과 같이 링크가 걸릴 것이다. List<Integer> pageStartList = new ArrayList<>(); for (int i = 0; i < pageCount; i++) pageStartList.add(i * GuestbookService.LIMIT); try { int tempValue = Integer.parseInt(value); value = Integer.toString(++tempValue); } catch (Exception e) { value = "1"; } Cookie cookie = new Cookie("count", value); cookie.setMaxAge(60 * 60 * 24 * 365); cookie.setPath("/"); response.addCookie(cookie); model.addAttribute("list", list); model.addAttribute("count", count); model.addAttribute("pageStartList", pageStartList); model.addAttribute("cookieCount", value); // WEB-INF/views/list.jsp로 ! return "list"; }
-
세션
세션의 정의 : 클라이언트별로 서버에 저장하는 정보.
Session 사용 예제 (HttpSession 이용)
먼저 web.xml에 다음을 추가한다.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
//30 = minute
Spring
@GetMapping(path="/studio")
public String studio(
@RequestParam(name="login", required=false)String login,
@SessionAttribute(name="intraId", required=false) String intraId,
HttpSession session,
HttpServletRequest request) {
if (login != null) {
session.setAttribute("intraId", login);
request.setAttribute("login", login);
} else if (intraId != null) {
request.setAttribute("login", intraId);
} else
request.setAttribute("login", "로그인하기");
return "studio";
}
-> HttpSession session을 통해 session사용이 가능.
-> setAttribute를 통해 세션에 정보를 등록.
-> RedirectAttributes.addFlashAttribute를 통해 redirect 시에도 attribute 정보를 유지.
* 세션 관련 메소드
long | getCreationTime() | 세션이 생성되고 얼마나 지났는지 ms단위로 반환한다. |
int | getMaxInactiveInterval() | 현재 생성된 세션을 유지하기 위해 설정된 최대 시간을 초 단위로 반환. 설정된 최대 시간이 없을 경우 기본값 30분. |
String | getId() | 세션에 할당된 유일한 식별자(ID)를 String type으로 반환 |
void | setAttribute(String name, Object value) | value를 name에 담음. |
Object | getAttribute(String name) | name을 통해 value를 얻어옴. |
void | removeAttribute(String name) | name에 해당하는 attribute를 삭제. |
void | setMaxInactiveInterval | 세션 유지 최대 시간을 설정. |
boolean | isNew() | 세션이 새로 생겼는지 확인. 세션이 새로 생겼으면 true, 반대의 경우 false |
void | invalidate() | 현재 생성된 세션 모두 삭제. |
'Spring' 카테고리의 다른 글
Spring 로깅, SLF4j, logback (0) | 2020.06.07 |
---|---|
Spring 파일업로드, 다운로드(서버 -> 클라이언트) (0) | 2020.06.07 |
Spring 인터셉터, 아규먼트리졸버 (Interceptor, ArgumentResolver) (0) | 2020.06.04 |
Javascript에서 Spring(Java)으로 객체 배열 보내기 (0) | 2020.06.03 |
Spring Application.properties 사용하기! (0) | 2020.05.08 |
최근댓글