nodejs cookie
📖 Cookie
웹브라우저는 기본적으로 cookie(쿠키)라는 것을 지원합니다. 쿠키를 활용하면 서버로부터 받은 데이터 중 일부를 브라우저 자체적으로 저장해놓고 추후 활용할 수 있습니다. 따라서 사용자가 브라우저를 사용하는 동안은 이러한 쿠키를 기반으로 정보가 저장 및 관리될 수 있다는 것입니다. 이러한 cookie를 관리하려면 node.js express에서는 별도의 패키지가 필요합니다.
```패키지 설치 $ npm install cookie-parser
cookie-parser는 이러한 브라우저의 쿠키데이터를 node.js가 확인하고 관리할 수 있도록 도와주는 패키지(미들웨어)입니다.
<br>
<br>
# 📖 사용예제
```js
var express = require("express");
var cookieParser = require("cookie-parser");
var app = express();
app.use(cookieParser());
app.get("/", function (req, res) {
if (req.cookies.count) {
var count = req.cookies.count;
} else {
req.cookies.count = 0;
}
console.log("Cookies: ", req.cookies);
res.cookie("count", count + 1);
});
- app.use(cookieParser())로 모든 쿠키값을 정상적으로 확인할 수 있도록 앞서 처리합니다.
- req.cookies로 현재 브라우저의 쿠키값들을 확인할 수 있습니다.
- res.cookie로 현재 브라우저에게 특정 쿠키값을 전달할 수 있습니다.
- 위 페이지는 쿠키값에서 count값을 받아 매번 1씩 더한다음 다시 브라우저의 쿠키를 설정하는 작업을 수행하고 있다.
📖 Cookie & Security
대부분의 쿠키는 외부에 노출되어선 안됩니다. 따라서 기본적인 암호화가 필요합니다.
var express = require("express");
var cookieParser = require("cookie-parser");
var app = express();
app.use(cookieParser("SECURITY KEY"));
app.get("/", function (req, res) {
if (req.signedCookies.count) {
var count = req.signedCookies.count;
} else {
req.cookies.count = 0;
}
console.log("Cookies: ", req.signedCookies);
res.cookie("count", count + 1, { signed: true });
});
- app.use(cookieParser(‘SECURITY KEY’))로 쿠키값을 암호화하여 관리할 수 있습니다.
- 쿠키값들을 불러올 때도 req.signedCookies를 활용해야 불러올 수 있습니다.
- 쿠키를 브라우저상에 새로 설정할때도 {signed: true} 옵션을 주어 암호화된 값을 넘겨주도록 합니다.
cf. Session cookie vs Permanent cookie
- Session cookie : 웹브라우저가 켜져있을 때만 유효 합니다 (재실행시 사라짐)
- Permanent cookie : 웹브라우저를 재실행해도 유지됩니다
res.cookie("myCookie", "set Cookie", { maxAge: 3000 }); // 초단위
아무것도 설정하지 않으면 Session cookie가 되고, maxAge 혹은 expires로 만료기간을 설정하면 Permanent cookie가 됩니다.
그 외 다양한 쿠키의 옵션
사용자의 컴퓨터가 현재 가지고 있는 쿠키를 확인 하는 방법은 req.cookies.[cookie name] 입니다.
쿠키를 저장하는 방법은 res.cookie(‘cookie name’, ‘cookie value’, option)입니다.
res.cookie() 메소드는 쿠키의 옵션을 설정 할 수 있습니다.
maxAge: 쿠키의 만료 시간을 밀리초 단위로 설정
expires: 쿠키의 만료 시간을 표준 시간 으로 설정
path: 쿠키의 경로 (default: /)
domain: 쿠키의 도메인 이름 (default: loaded)
secure: HTTPS 프로토콜만 쿠키 사용 가능
httpOnly: HTTP 프로토콜만 쿠키 사용 가능
signed: 쿠키의 서명 여부를 결정
댓글남기기