我无法使用expressjs会话了解我的代码有什么问题。
我在路由req.session.is_logged = true
上设置/login
,然后按F5调用路由/session
,其中req.session.is_logged
的值为false。
这是一些代码
var express = require("express");
var app = express();
app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'test', store: express.session.MemoryStore({
reapInterval: 60000 * 10
})}));
});
app.get('/session', function(req, res){
if (req.session.is_logged){
console.log('|-->Session recognized');
res.status(200);
res.send({ response: "OK" });
}else{
console.log('|-->Any session recognized');
res.status(403);
res.send({ response: "KO" })
};
});
app.get('/login', function(req, res){
req.session.is_logged = true;
res.status(200);
res.send({ response: "OK" });
});
app.listen(3000);
我看到了一些类似的方法,它似乎有效...感谢您的帮助!
Express v3.0.5
答案 0 :(得分:1)
您可能不尊重相同的origin policy,会话系统不支持CORS。
您的代码没有错,但是如果您访问网址mydomain.com
并通过mydomain.com:3000
访问您的节点服务器,则无法运行。
有很多方法可以使它工作(Apache代理反向,NGINX ......),做一些研究并采取最适合你的情况。
答案 1 :(得分:0)
你在/ login route上设置req.session.is_logged = false所以它怎么可能是真的..
使用内存存储进行会话的更好方法是
var MemoryStore = express.session.MemoryStore
,store = new MemoryStore();
app.use(express.session({ secret: 'something', store: store }));
答案 2 :(得分:0)
问题是您没有使用您的登录路由发送响应,因此客户端不知道设置cookie。解决方法是简单地发送任何响应:
app.get('/login', function(req, res){
req.session.is_logged = true;
res.send('Ok!'); /* Now the 'Set-Cookie' HTTP header will be sent to the client. */
});
并确保您正确引用MemoryStore
对象作为express.session
的属性,因为它不是全局对象:
app.use(express.session({secret: 'test', store: express.session.MemoryStore({
reapInterval: 60000 * 10
})}));