2013-12-09 44 views
1

我可能只是不明白Express如何管理會話,但當我將會話設置爲在7天后過期時In Express Express Session Cookie Expires Too Early

app.configure(function() { 
    app.set(express.static(__dirname + '/public')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)), 
    secret: '' 
    })); 
}); 

當瀏覽會話結束時cookie被設置爲過期,而不是指定的7天。

如果我改變上面的代碼例如

app.configure(function() { 
    app.set(express.static(__dirname + '/public')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    cookie: { 
     expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)), 
    }, 
    secret: '' 
    })); 
}); 

該cookie設置爲在7天內正確過期;這是否也會在7天內過期服務器上的會話?我原以爲這兩個是默認耦合的。

對於獎勵積分;在製作過程中,會話將存儲在Redis或類似文件中,但在開發過程中,我將它們存儲在內存中。有沒有辦法讓我可以看到這些數據以驗證它何時也會過期?

對於更多點!我相信這些會議默認不是'滾動'的嗎?我讀過req.session.touch()會重置會話;這是否會重置會話cookie的TTL呢?如果不是,你會如何建議我'滾動'會議

該會話最初設置爲7天。 第3天,用戶返回,會話過期重置爲此次訪問後的7天。 等等

因此,用戶可以有永久會話,只要他們在任何滾動7天內都處於活動狀態。

一如既往,非常感謝幫助!

回答

0

MemoryStore是默認的,它非常簡單,並且不支持TTL。

source code

如果你想獲得MemoryStore的,只是不喜歡這樣:

var ms = new MemoryStore(); 
app.use(express.session({ 
    store: ms 
    ... 
}))' 

ms.all(function (err, array_of_session) { 
    console.log(array_of_session); 
}); 

您應該使用Redis的或蒙戈來存儲會話。例如connect-mongo,它支持TTL和副本集。 https://github.com/kcbanner/connect-mongo

會話滾動? 沒有,你可以自己做

閱讀本 https://github.com/senchalabs/connect/issues/670

相關問題