초기 웹
HTML5
💡 쿠키, 웹 스토리지, 로컬 파일, 인덱스트 데이터베이스(Indexed DB7)
웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 저장하는 4KB 이하의 작은 데이터
HTTP
(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위해 서버/클라이언트 모델을 따르는 통신규약
비연결성(Connectionless), 비상태성(Stateless): 연결 상태 유지 x, 상태 정보 저장 x
즉, 매 요청마다 새로운 사용자로 인식함
하지만 로그아웃을 따로 하지 않고 종료했는데도 다시 들어가면 로그인이 되어있는 웹 사이트가 있다!
⇒ 쿠키, 세션
name=value; Expires=[Date]; Domain=[Domain]; Path=[Path]; [Secure]; [HttpOnly];
[SameSite=None|Strict|Lax]
name : 쿠키 이름value : 쿠키 값Date : 쿠키의 유효시간Domain : 쿠키를 필요로 하는 웹 서버의 도메인Path : 쿠키를 필요로 하는 웹 페이지 경로Secure : 쿠키에 있으면 암호화 등 안전한 통신이 사용될 때만 쿠키 전송 가능하다는 의미HttpOnly : 웹 서버와의 HTTP 통신 외에 다른 통신으로 쿠키 전송 불허 (보안에 중요, 자바스크립트 코드로도 쿠키를 읽을 수 없음 !) Facebook이나 Google에서 많이 활용하고 있는 속성)SameSiteSameSite=None : Secure 속성이 함께 설정되어야 함SameSite=Strict : 쿠키를 받은 브라우저가 쿠키를 발행한 웹 사이트에 직접 요청할 때만 쿠키 전송SameSite=Lax : Strict + 사용자가 다른 사이트에 접속하고 그곳에서 쿠키를 발행한 사이트로 이동할 때도 쿠키 전송, SameSite가 생략되면 Lax가 디폴트예시
age=23; expires=Mon, 31-DEC-2023 00:00:01 GMT; Domain=.google.com; Path=/; Secure;
HttpOnly; SameSite=None
서버가 가지고 있는 것이 아니라 사용자에게 저장됨 ⇒ 임의로 고치거나 지울 수 있고, 가로채기 쉬움 (위의 예시.)
따라서, 보안 취약 ⇒쿠키에는 민감하거나 중요한 정보를 담는 것은 위험하다
지워져도 되고, 가로채더라도 큰 일이 없을 수준의 정보들을 저장할 것
그렇다면 로그인 처리 ??? 아래 벨로그 참조
🍪 프론트에서 안전하게 로그인 처리하기 (ft. React)
현재 브라우저가 접속한 웹 사이트의 모든 쿠키들은 document.cookie프로퍼티에 문자열 형태로 연결되어 있다.
(1) 저장하기
function SetCookie (name, value, expireDate) {
let cookieStr = name + "=" + escape(value) + ((expireDate == null) ? "" :
("; expires="
+ expireDate.toUTCString()));
document.cookie = cookieStr;
}
escape(쿠키문자열) ⇒ 인코딩 하여 저장( 문자열을 ISO Latin-1 코드로 변환하는 자바스크립트 함수

🔼 쿠키를 저장해보았다 name은 “쿠키”, value는 “이히히” (이외 다른 속성들은 생략함)

🔼 쿠키 확인
(2) 꺼내오기
function GetCookie (name) {
let pairs = document.cookie.split(";"); // ;을 경계로 분할
for(let i=0; i<pairs.length;i++){
let pair = pairs[i].trim(); // 앞뒤 빈칸 제거
let unit = pair.split("=");
if(unit[0] == name)
return unescape(unit[1]);
}
return null;
}
unescape(인코딩된쿠키문자열) ⇒ 원래 데이터로 변환하는 자바스크립트 함수

🔼 위의 예시에 저장해놓은 쿠키의 value를 가져옴
참고자료
[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식