Search
Duplicate
📒

[Spring Study] 02-4. Cookie / Session

상태
수정중
수업
Spring Study
주제
Servlet
4 more properties
참고

Cookie

Cookie 생성

NOTE
서버에서 쿠키를 생성해서 응답에 넣어줌
Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie);
Java
복사
쿠키 생성코드

Cookie 사용

NOTE
쿠키 저장소에 있는 쿠키 사용
모든 요청에 쿠키는 포함되어 있음
@GetMapping("/") public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) { if (memberId == null) { return "home"; } // 로그인 Member loginMember = memberRepository.findById(memberId); if (loginMember == null) return "home"; model.addAttribute("member", loginMember); return "loginHome"; }
Java
복사
쿠키 사용코드

Cookie 삭제

NOTE
쿠키 제거
private void expireCookie(HttpServletResponse response, String cookieName) { Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie); }
Java
복사
만료시간을 0으로 잡아서 삭제

Session

Session 생성

NOTE
쿠키 값으로 UUID값이 넘어감
/** * 세션 생성 */ public void createdSession(Object value, HttpServletResponse response){ // 세션 id를 생성하고, 값을 세션에 저장 String sessionId = UUID.randomUUID().toString(); sessionStore.put(sessionId, value); // value에 로그인회원 정보 들어감 // 쿠키 생성 Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId); response.addCookie(mySessionCookie); }
Java
복사
session 생성 (쿠키생성, 세션 아이디 생성, 세션저장소 값 저장)

Session 조회/사용

NOTE
/** * 세션 조회 */ public Object getSession(HttpServletRequest request){ Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME); if(sessionCookie == null){ return null; } return sessionStore.get(sessionCookie.getValue()); }
Java
복사
session 조회 (세션 저장소 값 사용)
// 세션 관리자를 통해 세션을 생성하고, 회원데이터 보관 (로그인) sessionManager.createdSession(loginMember, response); // 세션 관리자에 저장된 회원 정보 조회(페이지 이동) Member member = (Member) sessionManager.getSession(request);
Java
복사
session 사용

Session 삭제

NOTE
/** * 세션 만료 */ public void expire(HttpServletRequest request){ Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME); if(sessionCookie != null){ sessionStore.remove(sessionCookie.getValue()); } }
Java
복사
session 만료 (세션 저장소 값 제거)

Session - HttpSession

NOTE
HttpSession ⇒ SessionManager와 같은 방식으로 동작
HttpSession session = request.getSession(); // 세션에 로그인 회원정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
Java
복사
서블릿을 통해 HttpSession을 생성하면 추정 불가능한 램덤 값을 가진 쿠키 생성
// @GetMapping("/") public String homeLoginV3(HttpServletRequest request, Model model) { HttpSession session = request.getSession(false); if(session == null){ return "home"; } // 세션 관리자에 저장된 회원 정보 조회 Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER); // 세션에 회원 데이터가 없으면 home if (loginMember == null) return "home"; // 세션이 유지되면 로그인으로 이동 model.addAttribute("member", loginMember); return "loginHome"; }
Java
복사
getSession(true/false)
true →세션이 없으면 생성한다
false → 세션이 없다면 null을 반환한다

Session - @SessionAttribute

NOTE
@GetMapping("/") public String homeLoginV3Spring(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { // 세션에 회원 데이터가 없으면 home if (loginMember == null) return "home"; // 세션이 유지되면 로그인으로 이동 model.addAttribute("member", loginMember); return "loginHome"; }
Java
복사
@SessionAttribute를 통해 세션을 쉽게 사용할 수 있다.
[참고]
server.servlet.session.tracking-modes=cookie
Java
복사
http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872 와 같은 주소가 이제 나오지않음
웹 브라우저가 쿠키를 지원하지 않는 경우를 대비해 URL로 세션을 최초에 보내줌
url이 아닌 쿠키로만 세션을 유지하려면 application.properties에 값추가