Node.js 尝试在另一个路由上访问时,req.session内容将被取消
我无法理解使用expressjs会话的代码有什么问题 我正在路由Node.js 尝试在另一个路由上访问时,req.session内容将被取消,node.js,session,express,Node.js,Session,Express,我无法理解使用expressjs会话的代码有什么问题 我正在路由/login上设置req.session.is_logged=true,然后按F5调用路由/session,并且req.session.is_logged的值为false 这里有一些代码 var express = require("express"); var app = express(); app.configure(function(){ app.use(express.bodyParser()); app
/login
上设置req.session.is_logged=true,然后按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您正在/login路由上设置req.session.is_logged=false,那么它怎么可能是真的
为会话使用内存存储的更好方法是
var MemoryStore = express.session.MemoryStore
,store = new MemoryStore();
app.use(express.session({ secret: 'something', store: store }));
您正在/登录路由上设置req.session.is_logged=false,那么它怎么可能是真的呢
为会话使用内存存储的更好方法是
var MemoryStore = express.session.MemoryStore
,store = new MemoryStore();
app.use(express.session({ secret: 'something', store: store }));
问题是您没有使用登录路径发送响应,因此客户端不知道如何设置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
})}));
问题是您没有使用登录路径发送响应,因此客户端不知道如何设置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
})}));
您可能不尊重这一点,会话系统不支持CORS
您的代码没有错,但是如果您访问URLmydomain.com
并访问mydomain.com:3000
上的节点服务器,它将无法工作
有很多方法可以让它工作(Apache proxy reverse,NGINX…),进行一些研究,并根据您的情况选择最合适的方法。您可能不尊重这些方法,会话系统不支持CORS
您的代码没有错,但是如果您访问URLmydomain.com
并访问mydomain.com:3000
上的节点服务器,它将无法工作
有很多方法可以让它工作(Apache proxy reverse,NGINX…),做一些研究,并根据您的情况选择最合适的方法。您的/login
路由集req.session.is_logged=false
是的,我在这里写了一个代码示例,但它不在我的本地机器上,很抱歉,我已经更新了代码。您的/login
路由集req.session.is_logged=false
是的,我在这里写了一个代码示例,但它不在我的本地计算机上,很抱歉,我已经更新了代码。您好,感谢回答我的问题,是的,我在这里写了false,但不在代码上对不起。。。我尝试了使用MemoryStore的方法,因为我是这样做的,所以在这行res.send({response:“Any session.”)上有一个错误
wich说TypeError:对象函数MemoryStore(){this.sessions={};}没有方法“set”
Hi,感谢您回答我的问题,是的,我在这里写了false,但不是在代码上对不起。。。我尝试了使用MemoryStore的方法,因为我是这样做的,所以在这行res.send({response:“Any session.”)上有一个错误
wich说TypeError:ObjectFunction MemoryStore(){this.sessions={};}没有方法“set”
我在我的代码中添加了它,同样的问题,但是我在尝试khurrum qureshi(就在下面)的方法时收到了一条错误消息,我没有这个方法,像我那样设置会话。检查我更新的答案。另外,请确保关闭res.send({response:“OK”}中的括号
。我已经更新了代码,事实上,MemoryStore是我之前实例化的对象,我已经通过express.session.MemoryStore
进行了更改,但在刷新页面时仍然无法识别会话…我将其添加到代码中,同样的问题,但尝试khurrum qureshi的方法(就在下面)会收到错误消息我没有,像我一样设置会话。检查我的更新答案。另外,确保关闭res.send({response:“OK”}中的括号
。我已经更新了代码,事实上,MemoryStore是我之前实例化的对象,我已经通过express.session.MemoryStore
进行了更改,但在刷新页面时仍然无法识别会话。。。