참고
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에 값추가