Skip to main content

로그인1(쿠키,세션)

·320 words·2 mins· loading
Table of Contents
SpringMVC2 - This article is part of a series.
Part 7: This Article

쿠키를 사용한 로그인
#

로그인 상태 유지하기 로그인에 성공하면, 쿠키를 생성하고 HttpServletResponse에 담는다. 웹 브라우저는, 세션이 끊기기 전까지 쿠키를 서버에 계속 보내줌

로그아웃시에는, 똑같은 이름의 새 쿠키를 생성하고,.setMaxAge(0)으로 지속시간을 없애고, HttpServletResponse 에 담아주면 된다.

보안문제
#

쿠키값은 임의로 바뀔 수도 있고, 웹 브라우저에 보관되기 때문에 누군가 정보를 훔처갈 수도 있음 해커가 한번 쿠키를 가져가면 평생 사용 가능

대안

  • 토큰을 사용, 서버에서 매핑해서 인식, 서버에서 토큰 관리(만료시간짧게)

세션 동작 방식
#

쿠키는 여러 보안 이슈가 있다. 이 문제를 해결하기 위해, 중요한 정보는 서버에 저장하고, 클라이언트와 서버를 임의의 식별자 값으로 연결해야 한다.

로그인

  • 사용자가 loginId,password정보를 전달하면 서버에서 확인한다.

세선 생성

응답 쿠키

결국 쿠키를 사용하지만, 클라이언트는 세션ID만 가지고 있을 뿐 중요한 정보는 서버에 있다

클라이언트의 쿠키 전달


세션 직접 만들기
#

  • 생성

    • sessionID(UUID사용) 생성
    • 세션 저장소에 sessionId와 값 저장
    • sessionId가 담긴 쿠키를 클라이언트에 전달
  • 조회

    • 클라이언트가 요청한 sessionId(쿠키) 값으로, 세션 저장소 조회
  • 만료

    • 클라이언트가 요청한 sessionId 값으로 세션 저장소에서 제거

세션은 특별한게 아니고 단지 쿠키를 사용해서 서버에서 데이터를 유지하는 방법일 뿐이다


서블릿 Http 세션
#

서블릿의 HttpSession 기능을 사용

세션 생성 & 조회 request.getSession(true) default

  • 세션이 있으면 기존 세션 반환, 없으면 생성
  • false를 주면, 없으면 null반환

** 정보보관 & 삭제 **

  • 보관 session.setAttribute(String name, Object value);로 값 넣기
  • 삭제
public String logoutV3(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }
        return "redirect:/";
    }
    //request.getSession(false)로 세션이 있는지 확인
    //만일 세션이 있으면 invalidate() 통해 제거

@SessionAttribute를 통해 세션에서 간단하게 꺼낼 수 있음

@GetMapping(.....)
 public String homeLoginV3Spring(
            @SessionAttribute(name = "loginMember",
            required = false) Member loginMember, Model model)

세션 정보와 타임아웃
#

**세션 기본 정보 **

  • sessionId : 세션아이디
  • maxInactiveInterval 유효시간
  • creationTime : 생성일시
  • lastAccessedTime : (사용자가) 최근 서버에 접근한 시간
  • isNew 새로 생성됬는지

타임아웃 설정 현재 사용자가 로그아웃을 하지 않으면, 서버는 세션 데이터를 계속 보관해야함 따라서, 사용자가 최근에 요청한 시간을 기준으로 생존시간을 유지해줌

  • 글로벌 설정 application.properties에 설정 server.servlet.session.timeout=60 (60초)
  • 특정 세션 단위로 설정
    session.setMaxInactiveInterval(60);

lastAcessTime 이후로 timeout 시간이 지나면, Was가 세션을 제거해줌

** 세션은 기본적으로 메모미를 사용하므로, 최소한의 정보만 보관하자**

SpringMVC2 - This article is part of a series.
Part 7: This Article