2016-08-18 10 views
0

私のアプリケーションは、ログインセッションとユーザーセッションを処理するconnect-mongo,express-sessionkeystone、および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") 
} 

を見つけることができますなぜセッションは破壊されないでしょうか?

答えて

0

ブラウザを閉じた後でもユーザーがログインしているのはなぜですか?

明らかにその機能が優れているためです。ブラウザが閉じられた後でもセッションを維持する。しかし、あなたは、ブラウザの閉鎖にセッションを期限切れにしたい場合は、それも後にログアウト?セッションデータを削除されていないなぜ、あなたはに-1

MAXAGEを設定することができます任意の方法

私はキーストーンの開発者が何を選んだのだろうと思います。私はちょうどサインアウトを見ていたkeystone/lib/session.jsの機能。

ここでは、req.session.regenerateを呼び出しています。

おそらくreq.session.destroyを呼び出す必要があります。私はその変更とテストをしようとしました。それでも私はデータベースでセッションを見ることができました。それから私は思う。解決策はclear_interval

+0

おそらくセッションがどのように動作するはずかを完全には理解できません。セッションが終了すると、保存されたセッションを削除する必要があるとの印象を受けましたが、デザインごとにセッションストアに保存されているので、再利用できますか? – ChrisRich

+0

いいえ、私はそれを避けてください。あなたはclear_intervalの提案を試しましたか?私は疲れましたが、成功することはできませんでした。 – enRaiser

+0

私はセッションを理解していないと言いました。私はそれを言った:-)私はちょうど私がセッションをそのままにしてセッションストアに残すべきだと思っています。それはおそらくそれがどのように動作するはずです。 – ChrisRich

関連する問題