Node.jsとExpressでcookieを利用する
使い方
Node.jsとExpress3.10.5の環境でcookieを利用する。
準備として、cookieParserミドルウェアを利用可能な状態にしておく。
app.use(express.cookieParser());
cookieParserはrouterミドルウェアよりも先に設定しないと機能が有効にならないようなので、その点注意したい。
cookieの操作
生成と取得
cookieの生成と取得についてのコードは以下のとおり
app.get('/cookie', function(req, res) { // beginnerというcookieがあればその値を、無い場合はランダム値を生成してbegginer変数に入れる var begginer = req.cookies.begginer || Math.random(); // begginer cookieを生成 res.cookie('begginer', begginer); // 画面に表示 res.send('Begginer value: ' + begginer); });
/cookie
にアクセスすると画面にランダム値が表示される。
firefoxのデベロッパーコンソールを開くと、cookieの状態を確認することが可能。
削除
上のコードにより、cookieの取得から生成までを行うことができた。今度は意図的にcookieを削除してみる。
app.get('/cookie-delete', function(req, res) { res.clearCookie('begginer'); res.send('cookie deleted'); });
/cookie-delete
にアクセスするとbegginerクッキーを削除することができる。削除した後に再度
/cookie
にアクセスすると新しいランダム値を生成することが出来る。
更新
cookie値の更新は生成と同じ方法で行うことが可能。
app.get('/cookie-update', function(req, res) { var begginer = Math.random(); res.cookie('begginer', begginer); res.send('Begginer updated: ' + begginer); });
更新なので、毎回begginer変数に新しいランダム値が入るようにしてある。
有効期限の設定
clearCookieメソッドを利用して意図的にcookieを削除することができるが、有効期限を設定し指定した時間を経過すると、そのcookieが無効になるようにすることが可能。
生成と取得に載せたコードを以下のコードに変更する。
app.get('/cookie', function(req, res) { var begginer = req.cookies.begginer || Math.random(); res.cookie('begginer', begginer, { path: '/cookie', maxAge: 20000 }); res.send('Begginer value: ' + begginer); });
/cookie
にアクセスして表示されるランダム値は、20秒間cookieに保存される。そのため、ブラウザで更新しても同じ値が20秒間表示され続ける。20秒を経過すると、begginerクッキーが無効になるために、新しいランダム値を生成しcookieが生成される。
暗号化
cookie値を暗号化するために、cookieParserにシークレットな文字列を与える。
app.use(express.cookieParser('wantedsecret'));
記事の上の方に載せた
生成と取得
のコードを暗号化に対応したものに変更する。
app.get('/cookie', function(req, res) { // 取得時にはsignedCookiesメソッドを使う var begginer = req.signedCookies['begginer'] || Math.random(); // signedオプションをtrueに設定 res.cookie('begginer', begginer, { signed: true }); res.send('Begginer value: ' + begginer); });
取得時には、signedCookiesメソッドを利用することで、特定のcookie値を取得することが可能。