쿠키
- 유효기간이 있음
- 키-값의 쌍 형태
- 서버는 미리 클라이언트에 요청자를 추정할 만한 정보를 쿠키로 만들어 보내고, 그 다음부터는 클라이언트로부터 쿠키를 받아 요청자를 파악
서버에서 쿠키 만들기
const http = require('http');
http.createServer((req, res) => {
console.log(req.url, req.headers.cookie);
res.writeHead(200, { 'Set-Cookie': 'mycookie=test' });
res.end('Hello Cookie');
})
.listen(8083, () => {
console.log('8083번 포트에서 서버 대기 중입니다!');
});
- 쿠키는 문자열 형식(mycookie=test)으로 존재, 쿠키 간에는 세미콜론으로 구분
- req.headers.cookie : 쿠키가 들어있는 곳
- req.headers : 요청의 헤더 (쿠키는 요청과 응답의 헤더를 오간다는 것을 알 수 있음!)
- Set-Cookie : 응답의 헤더에 mycookie-test라는 쿠키를 심으라고 브라우저에게 명령
쿠키 설정 옵션들
• 쿠키명=쿠키값: 기본적인 쿠키의 값입니다. mycookie=test 또는 name=zerocho와 같이 설정합니다.
• Expires=날짜: 만료 기한입니다. 이 기한이 지나면 쿠키가 제거됩니다. 기본값은 클라이언트가 종료될 때까지입니다.
• Max-age=초: Expires와 비슷하지만 날짜 대신 초를 입력할 수 있습니다. 해당 초가 지나면 쿠기가 제거됩니다. Expires보다 우선합니다.
• Domain=도메인명: 쿠키가 전송될 도메인을 특정할 수 있습니다. 기본값은 현재 도메인입니다.
• Path=URL: 쿠키가 전송될 URL을 특정할 수 있습니다. 기본값은 ‘/’이고, 이 경우 모든 URL에서 쿠키를 전송할 수 있습니다.
• Secure: HTTPS일 경우에만 쿠키가 전송됩니다.
• HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없습니다. 쿠키 조작을 방지하기 위해 설정하는 것이 좋습니다.
❗️쿠키의 조작 위험성
- 개발자 도구에서 Application 탭에서 보이는 것처럼 쿠키가 노출되어 있음
- 민감한 개인정보를 쿠키에 넣어두는 것은 적절하지 못함
세션 쿠키
- 세션을 위해 사용하는 쿠키
- 쿠키를 사용해 세션 아이디를 주고받는 식
// 쿠키에 이름을 담아서 보내는 대신 uniqueInt 라는 속성 명 아래에 있는 session 변수에서 사용자 정보를 가져와 사용
// - 서버에 사용자 정보를 저장하고 클라이언트와는 세션 아이디로만 소통
res.writeHead(302, {
Location: '/',
'Set-Cookie': `session=${uniqueInt}; Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
- 실제 배포용 서버에서는 세션을 위와 같이 변수에 저장하지는 않음 : 서버가 멈추거나 재시작되면 메모리에 저장된 변수가 초기화되기 때문 + 또한 서버의 메모리가 부족하면 세션을 저장하지 못하는 문제도 생김
- 따라서 보통 레디스나 멤캐시드 같은 데이터베이스에 넣어둠
Reference
- Node.js 교과서 개정 2판
'Node.js' 카테고리의 다른 글
[Node] cluster (0) | 2022.12.11 |
---|---|
[Node] https와 http2 (0) | 2022.12.11 |
[Node] REST, HTTP 메서드 개념 (0) | 2022.12.11 |
[Node] 이벤트, 이벤트 메서드 (0) | 2022.12.10 |
[Node] 파일시스템, 버퍼, 스트림 알아보기 (0) | 2022.12.10 |