我正在尝试从我的express应用程序访问angular(后端和前端分别部署在heroku中)的req.session。 我已经设置了CORS来处理从angular到我的express应用程序的http请求。
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json,X-XSRF-TOKEN,CSRF-Token,X-CSRF-Token');
next();
});
我在处理或获取请求会话时遇到了麻烦,因为它总是空的。 进行http get时,我能够将connect.sid链接到我的express应用程序,但是在angular中发出另一个请求时,它不会持久存在,因此每次刷新angular app时,会话ID也会同样刷新。 我需要cookie保持持久,以便在发出发布请求时可以使用它(例如,向有角度的发出http获取请求,“响应将是csrf令牌”,然后使用请求的csrf令牌进行登录以发出另一个http发布请求,但是由于每个每个请求的会话ID都会不同,csrf令牌将无效。每个快速会话都通过connect-mongo npm模块存储在mongo实验室中。
app.use(session({
secret : process.env.sessionKey,
httpOnly: true,
resave : true,
saveUninitialized: true,
store : new mongoStore({ mongooseConnection: mongoose.connection }),
cookie : { maxAge: 60 * 60 * 1000}
}));
我的Angular App中的Http get post已经可以正常使用了,因此可以正确设置CORS。 当我以角度访问路由URL( login )时检查响应标头时,它将使Http get请求调用,我注意到在标头上设置了cookie(cookies.sid),但是我不怎么存储它我可以将此Cookie会话ID用于我在angular应用中的下一个请求(例如登录后)
如果要读取保存在浏览器中的cookie,则可以在需要时创建以下函数:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return null;
}
检查Cookie name
去Application
标签在浏览器的开发者控制台,在这种情况下,我想connect.sid
。 获取姓名并致电
getCookie(<cookie-name>); you can use this value further.