java/study

쿠키와 세션(COOKIE SESSION)

dalae6763 2023. 3. 29. 13:42

쿠키(cookie)

내가만든쿠키….다 태워먹었지….

개인화된 서비스(브라우저별 서비스)를 제공위한 기술

브라우저별 데이터 저장기술

저장 데이터를 서버가 서비스를 제공하기 위해서 사용

개별화된 서비스

쿠키데이터는 브라우저에 저장되지만 실제 사용하는쪽은 서버가 사용한다

서비스 제공을 하는 서버가 쿠키데이터를 이용한다

요청시 서버로 전송(요청 헤더)헤더에 보내준다?

서버가 브라우저에 명령한다 (응답헤더로)

쿠키의 동작과정

생성

  1. 서버가 응답 헤더 - set-Cookie:키=값;…

저장

  1. 브라우저→쿠키저장(키=값)
    <%@page contentType="text/html; charset=utf-8"%>
    <%
    
        Cookie cookie = new Cookie("key1", "value1");
        cookie.setPath(request.getContextPath());//경로를 같게해주나?
        cookie.setMaxAge(60*60*24*365);//쿠키저장 1년 유지기간 설정(시간지나면 쿠키삭제)
        response.addCookie(cookie);//응답헤더 set-Cookie: key=value
    %>

전송

  1. 요청→브라우저→요청 헤더(cooike)를 통해 서버 전송

httponly:브라우저에서 통제할 수 없게 서버에서만 통제할 수 있게

path(경로)가 다르면 데이터는 공유되지 않는다

cookie클래스 메서드의 종류

쿠키 생성메서드 위치

  1. Httpservlet Respones respones
    1. addCookie(Cookie cookie):응답헤더 set-Cookie…

쿠키 조회하는 메서드

  1. HttpServlet Request request
    1. Cookie[] getCookies();

쿠키와 세션의 차이

쿠키생성

쿠키삭제

  1. cookie
    1. setMaxAge(0)→1970…
    1. 쿠키만료시간 utc+9

세션(session)

개인화된 서비스저장 정보

서버저장

요청시마다 전송x

JSESSIONID→쿠키 - 브라우저별로 구분되는 값→요청시 브라우저 →서버→세션 저장소에서 개인별데이터를 조회

HttpSession

void setAttribute(String name.,Object value)

Object getAttribute(String name)

void removeAttribute(String name)

→EL식 변수로 사용가능

session 내장객체 메서드 종류

세션생성

세션정보

세션삭제

  1. invalidate():세션 비우기 (예-로그아웃)
    <%@page contentType="text/html; charset=utf-8"%>
    <%
        session.invalidate();
    %>

세션 유효시간설정

  1. setMaxinactivelentreval
    1. defult(20minuts)
    1. setting to change(설정을 통해 변경)

세션객체를 조회

  1. httpServletRequest Request
    1. Httpsession getSession()
      <%@page content="text/html; charset=utf-8"%>
      <%
          String value=session.getAttribute("sessKey1");
          out.print("value="+value+"<br>");
      %>
      ${sessKey1}<br>
      ${sessionScope.sessKey1}//el식이아닌 조회
  1. PageContext pageContext
    1. HttpSession getSession()
  1. jsp페이지는 내장객체로 session


참고

요청헤더

요청 헤더(request header)란 클라이언트에서 서버로 요청을 보낼 때, 요청의 내용과 목적을 설명하는 정보를 담은 부분입니다. 이 정보는 클라이언트가 보내는 HTTP 요청의 시작 부분에 위치하며, 요청 메서드, URL, 클라이언트의 브라우저 정보, 쿠키, 인증 정보 등을 담을 수 있습니다. 서버는 이 정보를 바탕으로 요청을 처리하고 응답을 클라이언트에게 반환합니다.

응답헤더

응답헤더(response header)란 서버에서 클라이언트로 응답을 보낼 때, 응답의 내용과 목적을 설명하는 정보를 담은 부분입니다. 이 정보는 HTTP 응답 메시지의 시작 부분에 위치하며, 상태 코드, 응답 메시지, 쿠키, 캐시 제어 정보 등을 담을 수 있습니다. 클라이언트는 이 정보를 바탕으로 응답을 처리합니다.

쿠키데이터

쿠키데이터는 개인화된 서비스를 제공하기 위한 기술로, 브라우저별 데이터 저장기술을 사용하여 저장된 데이터를 서버가 서비스를 제공하기 위해 사용합니다. 브라우저에 저장되지만, 서버가 사용합니다. 클라이언트에서 서버로 요청을 보낼 때 요청 헤더에 쿠키데이터를 담아서 보내줍니다.

setcookie란

setcookie() 함수는 서버에서 브라우저로 쿠키를 보낼 때 사용됩니다. 쿠키는 브라우저에 저장되어 다음에 같은 서버로 접속할 때 사용됩니다. setcookie() 함수를 사용하여 쿠키를 설정하면, 해당 쿠키는 브라우저에 저장되어 다음에 같은 서버로 접속할 때 사용됩니다.

사용법

setcookie(name, value, expire, path, domain, secure, httponly);
  • name: 쿠키 이름
  • value: 쿠키 값
  • expire: 쿠키 만료 시간. 기본값은 0으로, 브라우저가 종료될 때 쿠키가 삭제됩니다.
  • path: 쿠키가 적용될 경로. 기본값은 "/"으로, 모든 경로에서 쿠키를 사용할 수 있습니다.
  • domain: 쿠키가 적용될 도메인. 기본값은 현재 도메인입니다.
  • secure: https 프로토콜을 사용할 때만 쿠키를 전송하는지 여부를 나타냅니다.
  • httponly: 서버에서만 쿠키를 읽고 쓸 수 있도록 설정하는 옵션입니다.

예시:

setcookie("username", "john_doe", time() + 3600, "/");

위 예시는 "username"이라는 이름으로 "john_doe"라는 값을 가진 쿠키를 생성하고, 쿠키의 만료시간을 현재시간 + 3600초(1시간)으로 설정하며, 모든 경로에서 쿠키를 사용할 수 있도록 합니다.

도메인

도메인이란 인터넷에 연결된 컴퓨터나 서버의 위치를 나타내는 주소입니다. 일반적으로 도메인은 이름과 .com, .org, .net 등의 최상위 도메인 이름으로 구성됩니다. 이러한 도메인 이름을 통해 사용자는 브라우저를 통해 해당 서버에 접속할 수 있습니다.

Httponly

httponly는 쿠키를 서버에서만 읽고 쓸 수 있도록 설정하는 옵션입니다. 이 옵션이 설정되면, 브라우저에서는 쿠키를 읽을 수 없습니다. 이를 통해 XSS(Cross-site Scripting) 공격 등의 보안 문제를 예방할 수 있습니다.

XSS(Cross-site Scripting)

XSS(Cross-site Scripting)란, 웹 어플리케이션에서 입력값 검증이 제대로 이루어지지 않아 악성 스크립트를 삽입하여 다른 사용자의 정보를 탈취하거나, 피해를 입히는 공격 기법입니다. 이 공격 기법은 주로 폼(form)이나 게시판, 댓글 등에서 많이 발생합니다.

아이디 저장으로 쿠키저장시 만료시간 365일이다

string value = AES256.encrypt(cokie.getvalue());:암호화

AES2256

AES256는 256비트 길이의 키를 사용하여 데이터를 암호화하는 대칭키 암호화 알고리즘입니다. AES는 Advanced Encryption Standard의 약자이며, 대부분의 현대 암호화 표준으로 사용됩니다.

쿠화

쿠키를 암호화시키기 위해서는 보안을 위한 암호화 기술 중 하나인 AES256 등의 대칭키 암호화 알고리즘을 사용할 수 있습니다. 예를 들어, 다음과 같은 코드를 사용하여 쿠키 값을 암호화할 수 있습니다.

String value = AES256.encrypt(cookie.getValue());

이 코드에서 AES256.encrypt()는 암호화를 위한 함수이며, cookie.getValue()는 암호화를 적용할 쿠키 값입니다.

쿠키가 없으면 세션을 못 쓴다?

쿠키가 없으면 세션을 못 쓰는 이유

쿠키와 세션은 모두 사용자의 개인화된 서비스를 제공하기 위한 기술입니다. 하지만 쿠키는 브라우저에 저장되며 서버에서 사용하고, 세션은 서버에 저장됩니다. 따라서 클라이언트에서 서버로 요청을 보낼 때 요청 헤더에 쿠키 데이터를 담아서 보내줘야 합니다. 만약 쿠키가 없으면 세션이 존재하지 않으므로 세션을 사용할 수 없습니다.


Uploaded by N2T