쿠키
쿠키 종류
- 영속 쿠키: 브라우저가 종료되어도 설정된 만료 날짜 까지 유지
- 세션쿠키: 브라우저 종료시 까지만 유지
사용되는 곳
주로 로그인처리와 같은 사용자 상태를 유지하는 곳에서 사용이 된다
Cookie idCookie = new Cookie("memberId", memberId);
HttpServletResponse.addCookie(idCookie);
쿠키는 위와 같이 얻어서 웹 응답 값에 포함 시켜서 응답을 보낸다
웹브라우저는 그 후 모든 요청에 쿠키 정보를 자동으로 포함하여 보낸다
Cookie cookie = new Cookie(cookieName, null);
cookie.setMaxAge(0);
response.addCookie(cookie);
쿠키를 없애고 싶으면 동일한 이름을 가진 쿠키를 새로 생성을 하여 생명주기를 0으로 설정하여 응답에 보내주면 된다
문제점
- 임의로 변경이 가능하다
- 훔쳐갈 수 있다
세션
쿠키의 보안적인 문제를 해결하기 위해서 모든 정보는 서버에 저장이 되어야 하는데 저장 되는 공간을 Session이라고 한다
세션에는 세션아이디를 key값으로 저장하고자 하는 것을 value의 형태로 map에 저장이 된다
이때 세션아이디는 추정이 불가능한 값으로 설정을 해주어야 한다
쿠키에 해당 세션아이디를 포함시켜 전달을 하게 된다면 세션저장소에서 사용자를 찾아서 로그인 상태를 유지하도록 하는 것이다
세션을 사용하는 법은 다음과 같다
Member loginMember = loginService.login(memberId, MemberPassword);
HttpSession session = request.getSession();
session.setAttribute("loginMember", loginMember);
분명 위 설명에서는 세션 아이디를 key 값으로 저장을 한다 했는데 코드를 보면 그 어디에서도 아이디를 넣는 것은 볼수가 없다
세션아이디
세션아이디는 톰캣이 자동으로 생성을 해준다
그렇다면 session.setAttribute("loginMember", loginMember);
해당 코드는 무엇인지가 의문이다
setAttribute()메소드를 타고 들어가보면 attributes.put(name, value);
와 같은 코드를 볼 수 있다
attributes는 protected ConcurrentMap<String, Object> attributes = new ConcurrentHashMap<>();
이고 톰캣이 만들어준 세션아이디를 키값으로 해당 attributes map 이 한번더 세션저장소에 저장이 된다
로그인 처리
HttpSession session = request.getSession(false);
Member loginMember = (Member) session.getAttribute("loginMember");
추후 로그인 유지를 위해 처리가 필요하면 request.getSession으로부터 해당 세션 아이디에 해당하는 map을 세션 저장소로부터 받아오고 session에서 사용자를 찾아오면된다
만일 사용자가 없으면 로그인이 안된것으로 볼 수 있다
@SessionAttribute
세션에서 attribute를 한번에 꺼내주는 역할을 한다
request.getSession
과 session.getAttribute
가 합쳐진 것으로 생각을 하면된다
public String loginHome(
@SessionAttribute(name = "loginMember", required = false) Member loginMember
){...}
위처럼 어노테이션을 통해서 세션을 얻어오고 다시 객체를 받아오는 것을 한번에 해결을 할 수 있다
타임아웃 설정
web.xml
<session-config>
<session-timeout>1800</session-timeout>
</session-config>
application.properties
server.servlet.session.timeout:1800
javaCode
session.setMaxInactiveInterval(1800);
참고
인프런_스프링 MVC 2편 - 백엔드 웹개발 핵심 기술_김영한 님 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
'공부기록 > Spring' 카테고리의 다른 글
Spring - 예외처리 (0) | 2022.02.06 |
---|---|
Spring-filter interceptor (0) | 2022.02.03 |
Spring-MVC4 에러검증2 (0) | 2022.01.22 |
Spring MVC3 - Error검증 (0) | 2022.01.17 |
Spring MVC2 (0) | 2022.01.07 |