我在node.js中设置了以下会话管理器代码
app.use(function(req, res, next) {
if (req.session && req.session.id) {
DB.FindUser(req.session.id, function(err, id) {
if (err) throw err;
if (id) {
res.setHeader('X-Seen-You', 'true');
next();
}else{
res.json({code : 100, status : false, msg :"Error in connection database"});
}
});
} else {
DB.AddUser({ sessionId: Helper.GUID(), ip: req.headers.origin}, function(err, id){
if(id){
req.session.id = id;
res.setHeader('X-Seen-You', 'false');
}
next();
});
}
});
首次发送请求时,会创建一个新会话并保存在数据库中并将cookie发送给客户端。 第二次请求,会话仍然存在并且找到了id。
但是,如果我关闭浏览器并再次打开,则不会从客户端发送cookie。
如何确保Cookie仍然存在。我对此并不太了解。我认为持续时间足以确保cookie保持活力。
app.use(sessions({
cookieName: 'session',
secret: Helper.GUID(),
duration: 30 * 24 * 60 * 60 * 1000, //(1 month)
activeDuration: 30 * 24 * 60 * 60 * 1000 //(1 month)
}));
其他信息 - 我的客户来自不同的域。我添加了CORS功能:
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:8000');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
在我的angularJS代码中添加了问题:
clinetApp.config([
'$httpProvider',
function($httpProvider) {
$httpProvider.defaults.withCredentials = true;
}
]);