我有一个Node.js服务器,我使用护照进行会话管理。计划使用它来实现很快记住我的服务器功能。但我有一个问题,正常会议基本上是一个记住我。 Aka会话cookie connect.sid
在浏览器关闭时没有被破坏,我认为这不是正确的行为。我使用connect-bluesky作为会话存储(使用azure表)和couchbase来存储默认会话信息以供将来使用。
相关代码:
Server.js
app.configure(function()
{
app.use(express.logger('dev')); // log every request to the console
// set up our express application
app.use(express.cookieParser());
app.use(express.json())
.use(express.urlencoded());
app.use(express.static(__dirname));
var db = new couchbase.Connection({host: 'http://localhost:8091', bucket: 'default'}, function (err){
console.log("In cb connect");
console.log(err);
});
app.use(express.session({secret: 'SECRET',
store: new BlueskyStore({
account: 'ACCOUNT',
key: 'KEY',
table: 'sessionsTable',
cookie: { path: '/', httpOnly: true, maxAge: null }
})
}));
app.engine('html', engines.ejs);
//app.set('views', __dirname+'/views');
app.set('view engine', 'html');
var data = fs.readFileSync( __dirname+"/"+process.argv['2'],'utf8');
GLOBAL.infoJSON = JSON.parse(data);
require('./config/passport')(passport, infoJSON);
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session
app.use(app.router);
});
Routes.js
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/');
}
app.post('/login2', passport.authenticate('local-login'),
function(req, res)
{
var input = "irrelevant input string";
var loginInfo = {
input : input,
userName : req.user.id,
repoId : req.user.repoId
}
edgeMod.loginWF(loginInfo, req, res, function (req, res, result)
{
res.write(result);
res.end();
});
});
app.get('/logout', function(req, res)
{
req.logout();
res.redirect('/');
});
passport.js
passport.serializeUser(function(user, done) {
db.set(user.id, user, function(err, result) {
done(null, JSON.stringify(user));
});
});
passport.deserializeUser(function(json, done)
{
var user = JSON.parse(json);
db.get(user.id, function(err, result)
{
if (result)
{
done(null, result.value);
}
else
{
done(new Error("Bad JSON string in session"), null);
}
});
});
passport.use('local-login', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done)
{
---login checks---
return done(null, serializeJson);
});
}));
如何确保会话在浏览器关闭时被销毁?这是我第一次做这样的事情的任何提示吗?
编辑:似乎是在Firefox中关闭浏览器关闭会话,但不是在Chrome中关闭。这可能与关闭时记住Chrome的页面有关吗?答案 0 :(得分:2)
在"继续你离开的地方"在chrome选项中打勾似乎是个问题。不勾选浏览器关闭会话。