Cookie
Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId()));
response.addCookie(idCookie);
@CookieValue(name = "memberId", required = false)
public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId,
Model model) {
cookie.setMaxAge(0);
Session
: 서버에 중요한 정보를 보관하고 연결을 유지하는 방법
핵심!
👉 회원과 관련된 정보는 전혀 클라이언트에 전달하지 않음
👉 추정 불가능한 세션 ID만 쿠키를 통해 클라이언트에 전달
UUID.randomUUID()
서블릿 HTTP 세션 1
Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05
request.getSession(true)
request.getSession(true)
request.getSession(false)
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
session.invalidate()
서블릿 HTTP 세션 2
@SessionAttribute(name = "loginMember", required = false) Member loginMember
로그인을 처음 시도하면 URL이 다음과 같이 jsessionid 를 포함한다
http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872
🔎 URL 전달 방식 끄기
application.properties
server.servlet.session.tracking-modes=cookie
sessionId : 세션 Id, JSESSIONID 값 (ex. 34B14F008AA3527C9F8ED620EFD7A4E1)
maxInactiveInterval : 세션 유효 시간 (ex. 1800초 = 30분)
creationTime : 세션 생성일시
lastAccessedTime :
isNew : 새로 생성된 세션인지, 조회된 세션인지 여부
세션을 무한정 보관할 경우 여러 문제 발생
따라서 사용자가 서버에 최근에 요청한 시간을 기준으로 30분 정도 유지
application.properties
server.servlet.session.timeout=60
session.setMaxInactiveInterval(1800);
session.getLastAccessedTime() : 최근 세션 접근 시간
주의할 점