[BackEnd] Cookie & Session (03/09)

박세윤·2023년 3월 9일

BackEnd

목록 보기
3/5
post-thumbnail

📖 Cookie & Session


✅ Http Protocol 특징

  • 비연결(connectionless) 지향형 통신 프로토콜

  • 응답 후 연결 종료 (stateless) : 무상태
    • 지속적인 연결 유지로 인한 자원 낭비 방지를 위해 연결 해제

    • 연결이 해제되면 서버는 클라이언트 정보를 알 수 없음

      • ex> 장바구니에 상품을 담았는데 페이지가 바뀌니까 정보가 없어지네..?
    • 이러한 문제의 해결 방안 => Cookie, HttpSession 활용



  • 서버가 생성하는 클라이언트 정보를 가지고 있는 파일

  • 클라이언트 컴퓨터에 저장되며, 필요에 따라 요청 시 서버로 같이 전송된다.

  • key-value 형태로 구성되며, 문자열 데이터이다.

  • 브라우저(클라이언트) 별로 별도의 쿠키가 생성된다. (브라우저가 다르면 다른 사용자로 처리)

  • 세션관리(사용자 아이디, 접속시간, 장바구니 등)을 위해 사용된다.

  • 사용자마다 다른 페이지를 보여줄 수 있다.

  • 사용자의 행동과 패턴을 분석하고 기록하는데 사용된다. (사용자가 클릭한 상품 관련 광고)



  • Clinet가 요청 생성

  • WAS는 Cookie를 생성하고 Http Header에 Cookie를 넣어 응답 (response에 넣어서 보내준다다는 뜻)

  • Client(Browser)는 Cookie를 저장, 해당 서버에 요청할 때 요청과 함께 Cookie를 전송

  • Cookie는 브라우저가 종료되더라도 계속 저장되기 때문에 (만료 기간 전까지) 동일 사이트 재 방문하여 요청 시 필요에 따라 Cookie가 재 전송된다.

  • Cookie는 브라우저 별로 생성 (새 브라우저(시크릿탭) 열면 사라짐)



  • 이름(key), 값(value), 만료일(Expire data, 저장기간), 경로정보로 구성

  • 클라이언트에 최대 300개의 쿠키 저장 가능

  • 하나의 도메인 당 20개의 쿠키 저장 가능

  • 쿠키 하나는 4KB (=4096byte) 까지 저장 가능 (최대 1.2MB)

  • 이미지의 경우 어디 서버에 저장해놓고 거길가는 링크만 쿠키에 저장함. (사진은 용량이 크잖아)

  • class다. => new를 통해 직접 cookie 생성이 가능하다.



✅ 쿠키 생성 및 추가

  • 쿠키 생성 : javax.servlet.http.Cookie(java.lang.String name, java.lang.String value)
Cookie cookie = new Cookie("userid", "ssafy");
  • 쿠키 응답에 추가 : void javax.servlet.http.HttpServletResponse.addCookie(Cookie cookie)
response.addCookie(cookie);





📌 HttpSession

✅ session : javax.servlet.http.HttpSession

  • 사용자가 웹 서버에 접속해 있는 상태를 하나의 단위보고 세션이라고 한다.

  • 각 세션은 sessionid를 이용해 구분한다.

  • WAS의 메모리에 객체 형태로 저장

  • 메모리가 허용하는 용량까지 제한없이 저장가능 (쿠키는 클라이언트에 저장해서 크기에 한계가 있었는데 세션은 서버에 저장해서 용량 제한 X)

  • 쿠키는 클라이언트에 저장되기 때문에 공유 PC의 경우 보안에 취약할 수 있다. 하지만 세션은 서버에 저장되기 때문에 쿠키에 비해 보안이 좋다.

  • 사용자(로그인) 정보 및 장바구니 등에 사용한다.



✅ session 동작 순서

  • 클라이언트가 페이지를 요청

  • 서버는 쿠키에 session id가 있는지 확인

  • session id가 존재하지 않으면 session id를 생성해 쿠키에 쓴 다음 클라이언트로 반환

  • 생성된 session id를 이용하여 서버 내 메모리를 생성

  • 클라이언트가 다음 요청 시 쿠키에 session id(JSESSIONID)를 포함해 전달하면 서버내에 저장된 session id와 비교하여 데이터 조회



✅ session 설정

  • 브라우저 당 하나의 JSESSIONID를 할당 받음

  • 아이디 또는 닉네임과 같이 로그인했을 경우 자주 사용되는 정보를 session에 저장하면 db에 접근할 필요가 없으므로 효율적이다.



✅ JSP 기본 객체 중...

pageContent : JSP
request : 요청 단위
session : 브라우저 - 브라우저 다 끄면 session 사라진다
application : server 켜져있으면 계속 살아있음

page < request < session < application

이거 실습파일 scope에 있는거 해보기



✅ session 사용하기

  • 요청 객체로부터 session 객체를 얻어온다.

  • session에 데이터를 설정하여 저장한다.

HttpSession session = request.getSession();
session.setAttribute("userid", "ssafy");

HttpSession : 인터페이스

  • session에서 값을 반환하는 getAttribute 메서드는 반환형이 Object이다.
String userid = (String)session.getAttribute("userid");



✅ Session 주요 메서드



profile
개발 공부!

0개의 댓글