1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

express-sessionとMemcachedでセッション管理する方法

Posted at

Node.jsのExpressでセッションを管理したい場合、”express-session”パッケージを使用します。また、サーバー側のセッション情報の保存はMemcachedを使用します。

ローカルの開発環境で動作させるには、Memcachedをインストールして、サービスを起動しておく必要があります。
Macで環境を構築する方法は前回の記事を参照してください。

前回:Macにmemcachedをインストールする

インストール

Node.jsおよびExpressはインストールされている前提で、新たに下記3つのパッケージをインストールします。

console.sh
npm install express-session
npm install memcached
npm install connect-memcached

Expressに設定を追加する

app.js
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.js
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の値がカウントアップされていれば成功です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?