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
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();
セッション全体が削除される。