Node.js 关于AppFog与ExpressJS的会话
我在ExpressJS应用程序上遇到会话问题。在本地,它工作得很好,但当我在AppFog上托管我的应用程序时,我会遇到一些会话问题,它们有时会丢失。。。在我的管理面板 我不知道为什么,但是,当页面刷新时,会话不再工作Node.js 关于AppFog与ExpressJS的会话,node.js,session,express,appfog,Node.js,Session,Express,Appfog,我在ExpressJS应用程序上遇到会话问题。在本地,它工作得很好,但当我在AppFog上托管我的应用程序时,我会遇到一些会话问题,它们有时会丢失。。。在我的管理面板 我不知道为什么,但是,当页面刷新时,会话不再工作 var restrictedArea = function(req, res, next) { if( req.session.access ) next(); else res.redirect('/signin'); } //
var restrictedArea = function(req, res, next) {
if( req.session.access )
next();
else
res.redirect('/signin');
}
// Get/Post example on admin panel
app.get('/posts/add', restrictedArea, admin.addPost);
app.post('/posts/add', restrictedArea, admin.savePost);
app.post('/posts/delete', restrictedArea, admin.deletePost);
app.get('/posts/edit/:id', restrictedArea, admin.editPost);
我的app.configure:
app.configure(function () {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.static(path.join(__dirname, 'public')));
//app.use(express.session({secret: 'some secret'}));
app.use(express.cookieSession({
secret: 'SECRET',
cookie: { access: false }
})
);
app.use(express.session({secret: 'some secret'}));
app.use(app.router);
app.use(function(req, res, next){
res.render('404.jade', {
title: "404 - Page Not Found",
showFullNav: false,
status: 404,
url: req.url
});
});
});
我的路线:
exports.authenticate = function(req, res) {
if( req.body.username == user.username && req.body.password == user.password ){
req.session.access = true;
renderToAdminIndex(req, res);
}else{
req.session.access = false;
renderToSignin(req, res, "Error, please try again!");
}
}
签出功能:
exports.signout = function(req, res) {
req.session.destroy(function(){
res.redirect('/');
});
}
Anthony如果您使用express 3.x,您需要使用express.cookieSession:
app.configure(function () {
...
app.use(express.cookieParser());
app.use(express.cookieSession(
{
secret: 'SECRET',
cookie: { maxAge: ... }
}
));
参考:
更新
要结束会话,请执行以下操作:
exports.signout = function(req, res) {
req.session = null;
res.redirect('/');
}
如何初始化会话管理?你用什么?饼干?redis?我用app.configure()更新了我的主题;-我使用cookies.so req.session.access将失去其价值。您应该使用Chrome中的网络检查器检查cookie中的值。好的,但我需要在我的路由中设置会话,而不是在我的应用程序中。configure()。。。请参见上面的我的路由…您需要配置express将会话放入cookie中,如我的回答中所示,然后在路由中设置会话值。我更新了主题,它可以工作,但我收到了一个销毁会话的错误。TypeError:对象#没有“销毁”方法。使用
req.session=null
清除会话变量。请参阅更新的答案。这要视情况而定。您可能希望在会话中保留一些数据,如用户名,即使他们已注销。否则,清除它是好的。