본문 바로가기

일기장

쿠키와 세션

쿠키 VS 세션

 
 
  • 쿠키는 세션 관리, 개인화, 트래킹에 사용되고 세션은 쿠키를 이용
  • 쿠키는 Header에 정보를 저장해서 보냄

 

  • 쿠키는 클라이언트에 저장, 세션은 서버에 저장

1.요청 : 웹 클라이언트가 서버에 요청을 보내면 서버는 클라이언트를 식별하는 session id 생성
2.세션키 생성
3.session id로 HttpSession 생성(key, value 를 저장)
4.session id를 저장하고 있는 쿠키 생성
5.클라이언트에 응답(session 아이디를 가진 쿠키 전송)
 
 

6. 웹 클라이언트 session id를 가진 쿠키 서버에 전송
7. 서버는 쿠키의 session id로 HttpSession 찾기
 
 
 

세션

특징

  • Session Id 는 브라우저 단위로 저장, 브라우저 종료 시 제거
  • 로그아웃 시 새로운 Session 생성
  • 로그인 여부, 닉네임 등의 정보를 Session 에 담으면 정보를 DB에 조회할 필요 없어 효율성 증가
     
     

보안

  • HTTPS 통신을 위해 Session 옵션 secure = true 로 설정
  • Httponly = true JS를 통해 Session 쿠키 사용할 수 없도록 강제 설정
1. 세션 생성 : 서버에 생성된 세션 있으면 반환, 없으면 새로 만들어서 반환 
HttpSession session = request.getSession(); 
HttpSession session = request.getSession(true); 
HttpSession session = request.getSession(false); 

2. 세션에 값 저장 : name, value 쌍으로 객체 Object를 저장하는 메서드 
setAttribute(String name, Object value) 
session.setAttribute(이름, 값) 
session.putValue(이름, 값); 

3. 세션에 저장된 값 조회 : getAttribute(String name) String value = (String)session.getAttribute("name"); Object 변수 = session.getValue(이름); 

4. 세션 값 삭제 removeAttribute(String name) 

5. 세션 유지 시간(서버에 접속한 후 서버에 요청을 하지 않는 최대 시간) 설정 : 기본 30분 유지 <session-config> <session-timeout>30</session-timeout> </session-config>

 

 


쿠키

  • 서버가 사용자의 웹 브라우저에 저장
  • 서버 요청이 있을 때 다시 서버로 보내주는 문자열 정보
  • 웹 페이지 방문 시 방문 기록 등 브라우저에서의 정보들이 저장된 텍스트 파일
  • 데이터 형태 : Key, Value 형태 String
  • 4KB 이상 저장 불가 (작은 값 보관 도움)
     
     
     
     
    용도
     
  • 로그인 시마다 다시 로그인 안 하고 사용자 정보 유지
  • 최근 검색 정보 광고 추천
  • 쇼핑몰 장바구니
  • 일정 기간 동안 팝업 다시 보지 않기
     
     
    쿠키 종류
  • 기술적 쿠키 : 이용자 구분 기능 수행(검색 주체가 사람인지 어플리케이션인지)
  • 분석 쿠키 : 정보 수집(검색 내용, 빈도 등등)
  • 광고 쿠키 : 광고 게제
     

쿠키 제어 옵션

 

  • Secure : HTTPS 프로토콜 상 암호화된 요청일 경우 전송
  • HttpOnly : Cross-site 스크립트 공격 방지,
  • Domain : 쿠키가 전송되게 될 호스트
  • Path : 쿠키는 Header로 전송, 웹 서버의 특정 URL에 대해서만 쿠키를 전송, 전송범위 설정가능
  • SameSite : 위조 공격에 대한 보호 방법
     
    Strict : SameSite 간의 요청에서만 쿠키 전송 허용 → 보안 강력, 편의성은 떨어짐
    Lax : 기본적으로 Strict, Http get방식 + <a href=””>, <link rel=”prerender”>통한 접근은 허용,
    None : SameSite 요청 , Cross site 요청 모두 전송 허용 → 보안 취약 . 해당 속성은 HTTPS 프로토콜 하에서 Secure 속성과 함께 사용해야 함
     
     
     
    1. Cookie 객제 생성
     
Cookie 변수 = new Cookie(이름, 값);

Cookie cookie = new Cookiew("name", "kaya");
 
 

2. 쿠키 저장 : 쿠키 객체를 웹 브라우저로 보내기

response.addCookie(cookie);

 

3. 쿠키 조회 : 쿠키는 여러개의 데이터가 전송됨으로 배열로 값을 받음

Cookie[] cookies = request.getCookies(); getCookieValue() //쿠키에 저장된 값을 가져옴 cookie.getName() //쿠키에 저장된 데이터 값에 대한 이름을 가져오는 메서드 
cookie.getValue() // 해당 이름에 저장된 데이터 값을 가져옴 
Cookie.setMaxAge(초);//유효기간 설정 -쿠키가 저장되는 기간, 브라우저 종료시 쿠키 사라짐

4. 쿠키에 저장 텍스트: 

  • 영문만 저장 가능
  • 한글은 URL인코딩 사용
String 변수 = URLEncoder.encode(값, 인코딩 이름); //인코딩
String 변수 = URLDecoder.decode(값, 인코딩 이름); //디코딩

request.setCharacterEncoding("utf-8"); //요청에 텍스트 인코딩 설정
response.setCharacterDecoding("utf-8"); //요청에 텍스트 디코딩 설정​
 

'일기장' 카테고리의 다른 글

n 번째 원소까지  (0) 2023.08.01
카운트 업  (0) 2023.08.01
IP Address  (0) 2023.08.01
#3. AWS를 사용하기 위한 도구에 대한 기초  (0) 2023.07.31
2. AWS 이해하기 위한 클라우드와 네트워크의 구조  (0) 2023.07.29