ExpressのSessionデータをRedisで管理する

Sessionストアベースのセッション管理をExpressで行う

使い方

Node.jsとExpress3.10.5の環境でSessionデータをサーバ側で管理する。

Sessionを利用するにあたりインストールしたモジュールは以下のとおり。

  • express
  • connect-redis
  • express-session

今回は、package.jsonで定義して、

npm install

で環境を用意した。

{
  "name": "WebEngineerBlogSampleApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.x",
    "connect-redis": "*",
    "express-session": "*"
  }
}

ExpressのSession機能では、標準でMemoryStoreにセッションデータを保存するようになっているが、

connect-redis

を利用することで、Redisサーバにセッションデータを格納できるようになる。

セッションデータの操作

コンフィグレーションの例

セッションデータを操作する前に、Expressで

  • モジュールの読み込み
  • cookieParserの設定
  • sessionの設定

を行う。下のコードが設定のサンプル。

var express = require("express");
var session = require('express-session') ;
var RedisStore = require('connect-redis')(session);
var http = require("http");
var app = express();
var server = http.createServer(app);

app.use(express.cookieParser('WANTEDSECRET'));
app.use(session({
  key: 'web.engineer',
  store: new RedisStore({
    host:'127.0.0.1',
    port:6379,
    prefix:'dev.blog'
  }),
  cookie: {
    path: '/',
    maxAge: 120000 // 2分間有効
  }
}));
app.use(app.router);

生成と取得

cookieベースのセッション管理でデータを操作した方法と似たやり方で、サーバ側のセッションデータを操作することが可能。

app.get('/', function(req, res) {
  // セッションデータが無ければランダム値を取得
  var begginer = req.session.value || Math.random();
  // valueという名前でセッションデータを生成
  req.session.value = begginer;
  res.send('Begginer value: ' + begginer);
});

Redisサーバに格納されたセッションデータを確認

ブラウザのcookie

express-redis-cookie

Redisのsession

express-redis-session

上の画像はphpRedisAdminを利用してsessionデータを表示した画面。

cookieとサーバ側のsessionキーが一致していることを確認できる。valueというセッション変数にランダム値が保存されていることも確認できる。

削除

Session変数の削除

上で確認したvalueというセッション変数のみを削除する。

app.get('/session-delete', function(req, res) {
  delete req.session.value;
  res.send('session variable deleted');
});
Sessionの削除

セッション変数レベルではなく、セッション全体を削除するには、destroyメソッドを使う。

req.session.destroy();

セッション全体が削除される。

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

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

ExpressのSessionデータをRedisで管理するの記事にコメントを投稿