쿠키란?
간단히 요약하면, 웹 서버가 브라우저에게 지시하여 사용자 로컬 컴퓨터에 저장하는 4K 이하의 작은 데이터이다.
쿠키는 HTTP가 무상태 프로토콜(바로 이전 요청과 현재 요청이 연결되어 있음을 기억하지 않는 통신)이라는 약점을 보완하기 위해 도입하였으며, name=value 형태로 저장된다.
쿠키 생성
var http = require('http');
var cookie = require('cookie');
http.createServer(function(request,response){
// 쿠키 생성
response.writeHead(200, {
'Set-Cookie':['yummy_cookie=choco','tasty_cookie=strrawberry']
});
response.end('cookie!!');
}).listen(3000);
쿠키는 위와 같이 간단하게 응답 헤더에 작성하여 생성한다.
쿠키 읽어들이기
쿠키를 읽어들이는 것은 추가 모듈이 없어도 가능하지만 (방법 링크), 쿠키가 여러개인 경우 복잡하므로 모듈을 설치하면 간단하게 다룰 수 있게 된다.
npm install cookie
위와 같은 방법으로 쿠키 모듈을 설치하면 다음과 같이 쿠키를 읽어들일 수 있다.
var http = require('http');
var cookie = require('cookie');
http.createServer(function(request,response){
// 쿠키 생성
response.writeHead(200, {
'Set-Cookie':['yummy_cookie=choco','tasty_cookie=strrawberry']
});
// 쿠키 읽기
var cookies = {};
if(request.headers.cookie!== undefined){
cookies = cookie.parse(request.headers.cookie);
}
console.log(cookies);
response.end('cookie!!');
}).listen(3000);
Session cookie와 Permanent Cookie
쿠키는 크게 Session cookie와 Permanent Cookie로 구분할 수 있다.
Session cookie는 웹 브라우저가 종료되면 자동으로 소멸되지만,
Permanent Cookie 웹브라우저가 종료되어도 사라지지 않는다.
Permanent cookie를 만드는 방법은 쿠키를 만들때 Expires 또는 Max-Age를 사용하면된다.
Expires는 cookie가 만료되는 절대적 시간을 지정하는 것이고,
Max-Age는 현재부터 설정하고자 하는 만료시점까지의 시간을 초로 환산한 값이다.
사용 예시는 다음과 같다.
response.writeHead(200, {
'Set-Cookie': [
`cookie1=choco; Expires=Tue, 19 Jan 2038 03:14:07 GMT`,
`cookie2=mint; Max-Age=${60*60}` // 1시간 뒤에 쿠키가 삭제.
]
});
이것을 조금만 응용하면 쿠키 삭제에도 사용할 수 있다.
삭제할 쿠키와 같은 이름의 쿠키를 생성하고, Max-Age를 0으로 설정하면 바로 해당 쿠키는 소멸된다.
response.writeHead(200, {
'Set-Cookie': [
`cookie1=; Max-Age=0`,
`cookie2=; Max-Age=0` // 0초 뒤에 쿠키가 삭제.
]
});
Secure 와 HttpOnly
Secure옵션을 설정하면 HTTPS로 통신하는 경우에만 쿠키가 전송된다.
HttpOnly옵션을 설정하면 Http 통신을 할 때만 쿠키가 전송된다. 자바스크립트 등으로는 쿠키를 가져올 수 없게 된다.
사용 예시는 다음과 같다.
response.writeHead(200, {
'Set-Cookie': [
`cookie1=choco; Secure`,
`cookie2=mint; Httponly`
]
});
Path 와 Domain
Path 옵션은 해당 경로나 그 경로의 하위 경로에 있는 페이지만 쿠키에 접근할 수 있게 한다. Path 옵션을 지정하지 않았을 때의 default는 현재 경로가 된다.
예를 들어, path=/admin 옵션을 사용하여 설정한 쿠키는 /admin과 /admin/something에선 볼 수 있지만, /home 이나 /adminpage에선 볼 수 없다.
Domain옵션은 쿠키에 접근 가능한 domain(도메인)을 지정한다. domain 옵션에 아무 값도 넣지 않았다면, 쿠키를 설정한 도메인에서만 쿠키에 접근할 수 있다.
예를 들어, site.com에서 설정한 쿠키는 other.com에서 얻을 수 없고, 서브 도메인(subdomain)인 forum.site.com에서도 쿠키 정보를 얻을 수 없다.
사용 예시는 다음과 같다.
response.writeHead(200, {
'Set-Cookie': [
`cookie1=choco; Path=/choco`,
`cookie2=mint; Domain=mint.com`
]
});
'WEB > 🌳 Node.js' 카테고리의 다른 글
[Node.js] 12. 세션(Session) (0) | 2022.08.08 |
---|---|
[Express] 2. 미들웨어 (0) | 2022.08.06 |
[Express] 1. 설치방법과 라우팅 (0) | 2022.08.06 |
[Node.js] 10. MySQL 연동 (0) | 2022.08.05 |
[Node.js] 9. 패키지 매니저 npm (0) | 2022.08.02 |