Carpe Diem

  Top > スポンサー広告> Node.js > Node.js で session を使う  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Node.js で session を使う

2013 - 07/23 [Tue] - 21:49

今回はNodeでのセッション管理機能の使い方です。

Expressフレームワークを使用する前提です。
まず最初にデフォルトのMemoryStoreセッションストアを使用します。しかしこれはメモリリークなどの不具合があるため、後半ではMongoDBやMemcachedなどのセッションストアを使った使用方法を解説します。

◆デフォルトのMemoryStoreセションストア

app.jsにcookieParsersessionをミドルウェア登録します。

app.use(express.cookieParser("hogehoge"));
app.use(express.session({secret: 'fugafuga'}));


express.cookieParserの引数は署名付きCookieを生成するための秘密文字列(パスフレーズ)です。任意。
express.sessionの引数secretはハッシュ化のための値です。これも任意。

あと注意として
app.use(app.router);
より前に記述する必要があります。以下の感じです。

app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.cookieParser("hogehoge"));
app.use(express.session({secret: 'fugafuga'}));
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});



◆使ってみる
routesの方で扱ってみます。
routes/index.js
exports.index = function(req, res){
if (req.session) {
console.log(req.session);
}
req.session.user = {
user: "hayo",
pass: "fuga"
};
res.render('index', { title: 'Express' });
};


初回アクセスでは何も保存されてないため
{ cookie: 
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }


と表示されますが、二回目以降は値を保持してます。
{ cookie: 
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
user: { user: 'hayo', pass: 'fuga' } }


こんな感じでログイン情報を保持するのに簡単なセッション管理の仕組みができました。
ちなみにログアウトなどでセッション情報を削除するときは

delete req.session.user;

とオブジェクトを指定して削除したり、全部消したいときは

req.session.destroy(callback);

とすればOKです。
DBに保存する場合は

req.session.save(callback);

とします。


◆MongoDBセッションストアを使う
先ほどとあまり変わりません。まず予めnpmでモジュールをインストールしておき、requireでインスタンスを作成します。今回はMongoDBっを使用するセッションストアなのでconnect-mongodbというものを使用します。

$ npm install connect-mongodb

app.jsで
var MongoStore = require('connect-mongodb')(express);

app.use(express.cookieParser("hogehoge"));
app.use(express.session({
key: 'sid',
cookie: {},
store: new MongoStore({
db: 'databaseName', // require
host: 'databaseHost', // default: 127.0.0.1
username: 'username', // optional
password: 'password', // optional
clear_interval: 60 * 60 // Interval in seconds to clear expired sessions. 60 * 60 = 1 hour
})
}))


デフォルトのセッションストア以外を使う場合は、express.sessionにstoreを指定します。
またDBを使う場合インスタンスの引数にDB情報を入れておきます。

セッション管理方法はデフォルトのセッションストアと同じです。


◆Memcachedセッションストアを使う
DBの構築なんかしてないし、面倒だなぁという人にはmemcachedが向いてます。メモリ上にデータを保存するので再起動すればデータは消えてしまいますが、お手軽に試すことができます。

$ npm install connect-memcached

app.js
var MemcachedStore = require('connect-memcached')(express);

app.use(express.cookieParser("hogehoge"));
app.use(express.session({
secret: 'fugafuga',
key: 'sid',
cookie: {},
store: new memcachedStore()
}));


こちらは特にDB情報必要ないです。


ソース:
【express】sessionで値の受け渡し【node.js】
Node.js + Express + MongoDB でのセッション管理
session secret? what is it
connect-redisでセッション管理

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。