Spring_쿠키(Cookie)와 세션(Session)

song·2023년 10월 27일

Spring

목록 보기
10/19

쿠키

  • 데이터 저장소.
  • 어디 브라우저에서 언제까지 사용할 정보의 집합.
  • 저장하는 위치는 사용자의 컴퓨터. 브라우저.

쿠키 생성

  • javascript랑 똑같음.
    Cookie cookie = new Cookie("넣을값의 이름", 넣을 값);
    // cookie.setMaxAge(??);
    response.addCookie(cookie);
  • setMaxAge 설정 안하면 브라우저 끄면 없어짐.
  • setMaxAge 단위는 초.
  • 메소드에 Response 가져와서 거기에 addCookie하면 된다.

쿠키 path 경로 설정

  • 쿠키의 위치를 설정해놓지 않으면 저장하는 당시의 위치의 바로 위에 저장이 된다.
    • 저장하는 곳이 /app/login/login이면 /app/login에 저장됨
  • cookie.setPath("/"); 로 해놓으면 최상위에 저장된다.
  • 주의할 점!
    만약 해당 쿠키를 삭제할 일이 있다면 설정해놓은 Path값도 같이 셋팅하고 삭제해야 한다. 해당 위치의 해당 키-밸류의 값을 찾아서 덮어쓰기하기 때문에 path값을 설정하지 않는다면 삭제되지 않는다.

쿠키 삭제

Cookie cookie = new Cookie("넣을 값의 이름", 넣을 값);
cookie.setMaxAge(0);
response.addCookie(cookie);

쿠키 사용

  • jsp에서 사용하기
    ${cookie.넣을 값의 이름.value}
    이렇게 쓰면 넣은 값을 가져올 수 있음.

개발자도구에서 보기


개발자도구 > 애플리케이션 > 쿠키 > 사이트
누르면 저장된 쿠키를 볼 수 있다.

세션

  • 쿠키를 이용해서 이전 상태를 유지
  • 브라우저를 끄면 삭제됨.
  • 로그인페이지에서 로그인을 하면 다른 페이지에도 로그인되어있는 것으로 인식해야 한다. 그것을 세션을 이용해서 인식하게 할 수 있다.
  • 사용자별로 하나의 세션만 만들 수 있다.
  • 하나씩 다 만들게 되면 리소스가 너무 많이 필요한데, 필요할 때만 생성하게 해놓고, 필요없어지면 지워지게 해놔서 리소스를 관리한다. (부담이 많이 되니 최소한으로 생성하기)
    ex) 로그인할 때 생성 -> 로그아웃 후 삭제

생성

public String main(HttpServletRequest request)
먼저 메인에서 request를 받고

HttpSession session = request.getSession();
session.setAttribute("저장할 세션 키값", 저장할 세션 밸류값);

삭제

  • 즉시 삭제
    • public String main(HttpSession session)
      먼저 메소드에서 Session를 받고
      session.invalidate();
      위 코드를 작성하면 된다.
  • 예약 삭제
    • public String main(HttpSession session)
      먼저 메소드에서 Session를 받고
      session.setMaxInactiveInterval(??);
      ??에는 원하는 시간 적으면 된다.
      기준은 초. 30분을 원하면 60*30 으로 쓰면 된다.
  • 즉시 삭제를 더 많이 사용.
  • 자동 삭제

    Servers > web.xml
    30분 후에 자동으로 종료되게 기본으로 설정되어있다.

세션 유무 체크

JSP

  • sessionScope.id
    세션이 있는지 위 코드로 확인할 수 있다. null이면 없고, null이 아니면 있는 것이다.
    <c:set var = "logInOutTxt" value = "${sessionScope.id==null?'login':'logout'}"/>
    logInOutTxt에 세션이 있으면 login, 없으면 logout이라는 값을 넣을 수 있다.
  • pageContext.request.getSession(false).getAttribute('id')
    session = "false"를 쓰면 sessionScope.id를 인식할 수 없어서 위 코드로 확인하면 된다.
    <c:set var = "logInOutTxt" value = "${pageContext.request.getSession(false).getAttribute('id') == null?'login':'logout'}"/>

Java

  • public String list(HttpServletRequest request)
    메서드에서 request받고
    HttpSession session = request.getSession();
    session.getAttribute("id");
    session.getAttribute("id");이 null이면 세션이 없는거고 null이 아니면 세션이 있는 것.

세션 비활성화

  • <%@ page session = "false" %>
    처음 메인페이지에 들어왔을 때 세션을 만들 필요가 없다. (리소스 낭비)
    그럴 때 파일 위에 해당 소스를 추가하면 세션을 만들지 않겠다는 뜻이다.
    주의) 생성을 안하겠다는 거지 있는 세션을 사용하지 않겠다는 뜻은 아니다.

세션과 쿠키의 차이

  • 저장위치
    • 쿠키 : 클라이언트 기기에 저장
    • 세션 : 웹 서버에 저장
  • 만료시점
    • 쿠키 : 쿠키 유효기간
    • 세션 : 브라우저 종료 시
  • 사용자원
    • 쿠키 : 클라이언트 리소스
    • 세션 : 웹서버 리소스
  • 보안
    • 쿠키 : 세션보다 안 좋음, 서버 다중화에 유리
    • 세션 : 쿠키보다 좋음, 서버 다중화에 불리
    • 다중화 : 서버가 여러개로 나뉘어진 상태에서 첫번째 요청을 1번 서버에, 두번째 요청을 2번 서버에 요청했을 때 쿠키는 따로 동기화작업을 하지 않아도 되지만 세션은 자동 동기화가 되지 않는다.
    • 다중화때문에 세션보단 쿠키를 더 선호하는 경우가 있다.
profile
계속 나아가기

0개의 댓글