2013-03-03 71 views
0

我有0.8.21 nodejs和3.1.0 express框架(模塊是最新的)。 沒有與快遞,MongoDB的和護照AUTH著名的Heroku項目:在nodejs刷新頁面時保持新會話

https://github.com/madhums/nodejs-express-mongoose-demo

會話存儲:

var express = require('express') 
    , mongoStore = require('connect-mongo')(express) 

    ... 

    app.use(express.logger('dev')) 

    // set views path, template engine and default layout 
    app.set('views', config.root + '/app/views') 
    app.set('view engine', 'jade') 

    app.configure(function() { 
    // dynamic helpers 
    app.use(viewHelpers(config)) 

    // cookieParser should be above session 
    app.use(express.cookieParser()) 

    // bodyParser should be above methodOverride 
    app.use(express.bodyParser()) 
    app.use(express.methodOverride()) 

    // express/mongo session storage 
    app.use(express.session({ 
     secret: 'noobjs', 
     store: new mongoStore({ 
     url: config.db, 
     collection : 'sessions' 
     }) 
    })) 

    // connect flash for flash messages 
    app.use(flash()) 

    // use passport session 
    app.use(passport.initialize()) 
    app.use(passport.session()) 

    app.use(express.favicon()) 

    // routes should be at the last 
    app.use(app.router) 

    ... 

問題:我希望用戶登錄時僅70秒,所以我在app.use(express.session({之後寫了cookie: {maxAge: 70*1000},,結果如下:用戶只能通過站點走過70秒,而不是註銷。如果用戶刷新頁面或投奔鏈接,會話更新到如數據庫:

{ "_id" : "cVYWfv7kHbaEPNUCD2Bbbaw4", 
    "session" : "{\"cookie\":{\"originalMaxAge\":70000,\"expires\":\"2013-03-02T14:46:52.146Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"51320f3fd04c162d14000003\"},\"flash\":{}}", 
    "expires" : Date(1362235612146) } 

但無論如何,用戶登錄時只有70秒。我的意思是會話更新爲mongodb,新的日期爲expires,但用戶仍然可以僅在70秒鐘登錄。

請幫助我。 謝謝。

回答

1

我想connect-mongo維護一個會話的TTL索引,它會在1分鐘的時間間隔後檢查是否刪除一個會話。所以你只能讓你的會話在1分鐘,2分鐘或k分鐘內過期,k是整數。你不能刪除你的會話,否則如果使用連接mongo過期邏輯。

你可以自定義自己期滿什麼

  1. 要麼寫邏輯忽略了什麼連接蒙戈在做什麼。 (假方法)

  2. OR 70秒後只需在瀏覽器中刪除cookie即可。寫一個這樣做的JavaScript代碼。儘管還有一個缺點,那就是用戶可能會在他的最後禁用javascript並讓cookie存活,並且他可能會繼續他的會話到最大120秒(假設您的expires設置爲70秒)。如果在這種情況下這50秒可能會受到影響,那麼您可以使用這個快速優雅的修復程序。

+0

謝謝你的回答。我認爲有很簡單的方法可以快速運行我所需要的。好的,會嘗試。 – sirjay 2013-03-03 20:26:24