跨域如何保持session?

express项目中用到了express-session,开发阶段前后端是两个不同的服务,所以前段用了代理的方式去请求服务端,发现这样session保存不了。请问是什么原因,该怎么解决呢?

app.use(session({
  secret: 'xxx',
  resave: true,
  saveUninitialized: false,
  maxAge: 1000 * 3600
}));

我前端用的是angular的脚手架,开发的时候前段启了一个服务为localhost:3000,然后服务端的地址是localhost:1994,这样算是不同的域的吧?

因为后端用了session,而session很关键的一步就是要在浏览器上设置一个cookie,好像在跨域的情况下,登录完之后cookie没有设置上去,response上是有cookie的
图片描述
我应该从前端解决这个问题,还是从服务端解决呢?

阅读 10k
4 个回答

session是cookie的升级版,是使用cookie当做id,然后数据存在服务器上的做法。
然而,跨域对于cookie来说,就是两个不同的网站。所以并不是设置一个什么就能解决的。

不同端口算是不同的域的。
所以你可以设置一个nginx或者什么别的来做一下转发,避免跨域。
可以弄一个nginx,设置8080,然后app指向3000,api指向1994。

或者不使用session,而使用token来做api请求。

如果你ajax使用的是axios,那你可以尝试一下设置axios的配置参数 withCredentials: true。因为axios默认跨域请求不携带cookie

把session保存在第三方,如redis里面,可参考这个项目

如果服务端是自己写的,为什么不在服务端设置来允许跨域访问呢?
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Origin:*');

credentials是设置可以传送cookie。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题