node.jsでsession管理 connect-mysql-session
node.jsでアプリを書いていて、
session管理しなきゃなあと。
こんなページがあった。
POPULARの%ってどうやって調べてんだろうか。redisとmongodb人気だ。
https://nodejsmodules.org/tags/sessions
そんな中、connect-mysql-sessionを使う事にしました。
mysqlがinstall済みだったから。ただそれだけ。
GitHub - CarnegieLearning/connect-mysql-session: A MySQL session store for node.js connect.
ほとんどUsageの通りに書くだけでした。
var routes = require('./routes/main'); ... var express = require('express'), MySQLSessionStore = require('connect-mysql-session')(express); var app = express.createServer(); app.use(express.cookieParser()); app.use(express.session({ store: new MySQLSessionStore("dbname", "user", "password", { // options... }), secret: "keyboard cat" })); ... var loginCheck = function(req, res, next) { if(req.session.user) { next(); } else { res.redirect('/login'); } }; ... app.get('/', loginCheck, routes.index); ...
app.get()にloginCheckを噛ませてあげれば、
sessionが切れている場合には、/loginにリダイレクトしてくれる感じになりました。
ちなみに、内部的には以下のSQLが実行されていました。
初回リクエスト時
# Sessionsテーブルが無いので作成 Executing: CREATE TABLE IF NOT EXISTS `Sessions` (`sid` VARCHAR(255) NOT NULL UNIQUE, `expires` INT, `json` TEXT, `id` INT NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)); MySQL session store initialized. # Session Id をinsert Executing: SELECT * FROM `Sessions` WHERE `sid`='XXXXXXXXXXXXXXXXXXXXXXXX' LIMIT 1; Executing: SELECT * FROM `Sessions` WHERE `sid`='YYYYYYYYYYYYYYYYYYYYYYYY' LIMIT 1; Executing: INSERT INTO `Sessions` (`sid`,`id`,`createdAt`,`updatedAt`,`expires`,`json`) VALUES ('YYYYYYYYYYYYYYYYYYYYYYYY',NULL,'2013-10-17 03:42:01','2013-10-17 03:42:01',1382035321,'{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}');
セッション作成時(req.session.user = xxxxみたいな処理)
Executing: SELECT * FROM `Sessions` WHERE `sid`='YYYYYYYYYYYYYYYYYYYYYYYY' LIMIT 1; Executing: SELECT * FROM `Sessions` WHERE `sid`='YYYYYYYYYYYYYYYYYYYYYYYY' LIMIT 1; # user名が入れられてupdatedAtがのびる Executing: UPDATE `Sessions` SET `sid`='YYYYYYYYYYYYYYYYYYYYYYYY',`expires`=1382035583,`json`='{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"user\":\"test4\"}',`id`=1,`createdAt`='2013-10-17 03:42:01',`updatedAt`='2013-10-17 03:46:23' WHERE `id`=1
次回接続時
Executing: SELECT * FROM `Sessions` WHERE `sid`='YYYYYYYYYYYYYYYYYYYYYYYY' LIMIT 1; Executing: SELECT * FROM `Sessions` WHERE `sid`='YYYYYYYYYYYYYYYYYYYYYYYY' LIMIT 1; # updatedAtが更新 Executing: UPDATE `Sessions` SET `sid`='YYYYYYYYYYYYYYYYYYYYYYYY',`expires`=1382035629,`json`='{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"user\":\"test4\"}',`id`=1,`createdAt`='2013-10-17 03:42:01',`updatedAt`='2013-10-17 03:47:09' WHERE `id`=1
という事で、ほとんど勝手にやってくれる。
SELECTが2回あるのがなぜか不明だったりしますが、ソース読む元気も無いので良しとする。
自作アプリ紹介コーナー
https://itunes.apple.com/jp/app/tokimekiekisupuresustation/id660044163?mt=8