Node.jsのExpressでセッションを管理したい場合、”express-session”パッケージを使用します。また、サーバー側のセッション情報の保存はMemcachedを使用します。
ローカルの開発環境で動作させるには、Memcachedをインストールして、サービスを起動しておく必要があります。
Macで環境を構築する方法は前回の記事を参照してください。
インストール
Node.jsおよびExpressはインストールされている前提で、新たに下記3つのパッケージをインストールします。
npm install express-session
npm install memcached
npm install connect-memcached
Expressに設定を追加する
const session = require('express-session');
const MemcachedStore = require('connect-memcached')(session);
app.use(session({
secret: 'cookie-no-secret_key', // 任意の文字列に書き換えること
resave: false,
saveUninitialized: false,
cookie: {
path: '/',
httpOnly: true,
secure: false,
maxAge: 1000 * 60 * 60
},
store: new MemcachedStore({
hosts: ['127.0.0.1:11211'],
secret: 'server-no-secret_key' // 任意の文字列に書き換えること
})
}));
2ヶ所あるsecretは(誰にも知られていない文字列に)書き換えてください。
一つ目(session)のsecretはクライアント側(Cookie)を保存する際の暗号化キーです。
二つ目(store)のsecretはサーバー側(Memcached)に値を保存する際の暗号化キーになります。
これら2つのsecretは異なる文字列で問題ありません。
異なる文字列のほうがセキュリティ的には良いと思います。
cookieのmaxAgeはミリ秒単位で指定します。
この例だと、クッキーの有効期間は1時間となります。
指定しない(デフォルト)の場合、クッキーの有効期間はブラウザを閉じるまでとなります。
動作チェック
アクセス数をカウントアップするテストページを作ります。
app.get('/test', (req, res) => {
if(req.session.views){
req.session.views++;
}
else {
req.session.views = 1;
}
res.json({
'session_id': req.sessionID,
'views': req.session.views
});
});
ローカルのポート3000番でサーバーを起動して、テストページ(http://localhost:3000/test)にアクセスしてviewsの値がカウントアップされていれば成功です。