私のアプリケーションは、ログインセッションとユーザーセッションを処理するconnect-mongo,express-session、keystone、およびpassportを使用しています。終了したセッションは破棄されていません
しかし、セッションが終了すると(ユーザーがログアウトするかブラウザウィンドウを閉じる)、セッションはMongoDBセッションストアから削除されません。 MongoDBの中のセッションのための
var express = require('express')
, path = require('path')
, cookieParser = require('cookie-parser')
, bodyParser = require('body-parser')
, passport = require('passport')
, session = require('express-session')
, mongoStore = require('connect-mongo')(session)
, compression = require('compression')
, favicon = require('serve-favicon')
, config = require('../config')
, flash = require('connect-flash');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', parameterLimit: 52428800, extended: true}));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(compression());
app.use(express.static(path.join(__dirname, '../', config.get('staticContentPath')), {
maxAge: (60 * 60 * 24 * 7) * 1000
}));
app.use(session({
secret: process.env.COOKIE_SECRET,
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 24 * 60 * 60 * 1000 // 24 hrs
},
store: new mongoStore({
url: config.get('mongo')
})
}));
app.use(passport.initialize());
app.use(passport.session());
コレクション名がapp_sessionsです:
は、ここに私のミドルウェアの設定です。私の依存関係ツリーで検索すると、これはKeystone CMSによって処理されることがわかります。
またクッキー名がkeystone.sid
ですこれは私のキーストーンの設定です:
var config = require('../../lib/config')
, keystone = require('keystone');
module.exports = function(app){
keystone.init({
'app': app,
'port': config.get('keystone').port,
'brand': config.get('sitename'),
'views': app.get('views'),
'view engine': app.get('view engine'),
'custom engine': app.get('custom engine'),
'auto update': false,
'session': true,
'session store': 'mongo',
'auth': true,
'user model': 'Account',
'cookie secret': process.env.COOKIE_SECRET,
'compress': true,
'frame_guard': 'deny',
'mongo': config.get('mongo')
});
keystone.import('../../lib/models');
keystone.start();
};
そして最後にMongoDBからいくつかの例のセッションオブジェクト:あなたは
{
"_id" : "GUL2jwhCvqZHO7Gqy8KCHod1qJmrl6j4",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"_garbage\":\"2016-08-17T13:01:53.475Z\",\"guestPageViews\":1,\"flash\":{}}",
"expires" : ISODate("2016-08-31T13:01:57.642+0000")
},
{
"_id" : "C-4cuoyIGHgYM8hLGhQVOv3bRwChwkxq",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"_garbage\":\"2016-08-17T13:02:44.000Z\",\"guestPageViews\":1,\"flash\":{}}",
"expires" : ISODate("2016-08-31T13:02:51.473+0000")
},
{
"_id" : "foE9ewU3eoJXIzkW97GSbMGNzFt2W4ww",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"_garbage\":\"2016-08-17T13:04:35.294Z\",\"guestPageViews\":1,\"flash\":{}}",
"expires" : ISODate("2016-08-31T13:04:38.979+0000")
},
{
"_id" : "P8ugG4TFHJAuCzNS9aCMSybIS25uFtL1",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"userId\":\"56cadedbc580346a1bd0ee0c\",\"_garbage\":\"2016-08-17T23:57:03.615Z\",\"flash\":{}}",
"expires" : ISODate("2016-08-31T23:57:05.203+0000")
}
を見つけることができますなぜセッションは破壊されないでしょうか?
おそらくセッションがどのように動作するはずかを完全には理解できません。セッションが終了すると、保存されたセッションを削除する必要があるとの印象を受けましたが、デザインごとにセッションストアに保存されているので、再利用できますか? – ChrisRich
いいえ、私はそれを避けてください。あなたはclear_intervalの提案を試しましたか?私は疲れましたが、成功することはできませんでした。 – enRaiser
私はセッションを理解していないと言いました。私はそれを言った:-)私はちょうど私がセッションをそのままにしてセッションストアに残すべきだと思っています。それはおそらくそれがどのように動作するはずです。 – ChrisRich