请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

后端express设置跨域后,前端没有保存cookie

这里已经看到了cookie,但是application里面没有保存cookie,请求的session里面也没username等信息
图片描述
图片描述


app.use(session({
  secret: 'adb123_', // 密匙
  name: 'session_id', // 保存在本地 cookie 的一个名字,默认为connect.sid 可以不设置
  saveUninitialized: true, // 强制将未初始化的 session 存储,默认为true。建议为 true
  resave: true, // 强制保存 session,即使它没有变化,默认为true。建议设置为false
  // rolling: true, // 在每次请求时设置 cookie,这将重置 cookie 过期时间,默认为 false
  cookie: {
    path: '/', // 默认配置
    httpOnly: true, // 默认配置
    maxAge: 24 * 60 * 60 * 1000 // session过期时间为一天
  }
}))
// 跨域的设置
app.use((req, res, next) => {
  const origin = req.headers.origin
  res.setHeader('Access-Control-Allow-Origin', origin)
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT')
  const headers = 'X-Custom-Header, Origin, X-Requested-With, Content-Type, Accept'
  res.setHeader('Access-Control-Allow-Headers', headers)
  // 发送请求时带 cookie
  res.setHeader('Access-Control-Allow-Credentials', true)

  const maxAge = 24 * 60 * 60 * 1000
  // res.cookie("name", "zhangsan", {maxAge, httpOnly: true})
  next()
})

正在回答 回答被采纳积分+3

2回答

双越 2021-08-19 07:51:29

跨域设置 cookie 

1. 服务端要设置 

res.header("Access-Control-Allow-Credentials",true);

2. 前端要设置 withCredentials

https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials 


0 回复 有任何疑惑可以回复我~
  • 提问者 菜鸟x #1
    function post(url, data = {}) {
                return $.ajax({
                    type: 'post',
                    url,
                    xhrFields: {
                        withCredentials: true //允许跨域带Cookie
                    },
                    data: JSON.stringify(data),
                    contentType: "application/json",
                })
            }
    都写了的。chrome和firefox,UC等浏览器都不行,我在写的代码或者在老师你的epxress代码里面写上上面的也不行。
    回复 有任何疑惑可以回复我~ 2021-08-24 12:37:41
  • 双越 回复 提问者 菜鸟x #2
    像这种问题,你单独做一个最简单的 demo (只包含一个跨域传递 cookie 功能,其他任何功能都不要加),试一下。
    回复 有任何疑惑可以回复我~ 2021-08-24 17:37:05
双越 2021-08-18 07:57:09

比较怪异。

我看你截图中,请求的服务端 host 是 localhost:3000 ,你前端 host 是哪个?有没有跨域

0 回复 有任何疑惑可以回复我~
  • 提问者 菜鸟x #1
    嗯,跨域了。前端是用的vscode的插件启动的,端口为http://192.168.19.33:5500
    回复 有任何疑惑可以回复我~ 2021-08-18 18:25:37
  • 提问者 菜鸟x #2
    http://192.168.19.33:5500,跨域了
    回复 有任何疑惑可以回复我~ 2021-08-18 18:26:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信