我(幾乎)成功地使用Node.js與Express和Redis來處理會話。Node.js - 會話不會持續通過res.redirect()
我遇到的問題是當我使用res.redirect()
時,會話不被保留。
這是我如何能看到它:
req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');
的執行console.log()打印:
{ lastAccess: 1322579131762,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 },
username: 'admin' }
現在,這裏是下面的代碼:
app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
console.log(req.session);
這console.log()打印出此:
{ lastAccess: 1322579131775,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 } }
顯然,'username'對象已經消失。會議沒有保留它,只是重建了一個新的會議。
我該如何解決這個問題?如果您需要任何信息,請不要猶豫。
這裏是我設置會話管理代碼:
app.configure(function() {
// Defines the view folder and engine used.
this.set('views', path.join(__dirname, 'views'));
this.set('view engine', 'ejs');
// Allow parsing form data
this.use(express.bodyParser());
// Allow parsing cookies from request headers
this.use(express.cookieParser());
// Session management
this.use(express.session({
// Private crypting key
secret: 'keyboard cat',
store: new RedisStore,
cookie: {
maxAge: 60000
}
}));
this.use(app.router);
});
這裏是整個項目(我的意思是,部分吧),對要點:https://gist.github.com/c8ed0f2cc858942c4c3b(忽略的渲染視圖屬性)
您還可以粘貼包含Redis會話存儲的代碼嗎?這裏有一個超時選項,可能你意外地把它設置得太低了。 – alessioalex
增加:)它設置在60秒,我顯然不使用60秒來寫入憑據... –
我認爲這是一個小項目,我認爲最好將它發佈到某處(gist,pastie)並給一條鏈接。我敢打賭,這個錯誤在某種程度上是不粘貼的。 (只是猜測) – alessioalex