Expressでcookieを使う

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

にアクセスすると画面にランダム値が表示される。

express-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値を取得することが可能。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Expressでcookieを使うの記事にコメントを投稿