首页 > 解决方案 > 为什么浏览器不能存储cookies?

问题描述

目前,我正在进行一个单独的项目,但我遇到了与标题相同的问题。

客户端在使用 HTTPS 进行反应。

服务器端使用 HTTPS 在 Express 上。它们是跨域的。

当点击提交按钮时,下面的代码正在运行。

//client side

axios
  .post('https://ohmycounty.me/user/signin', {email : "byron@google.com", password: "example", {
    withCredentials: true,
})


//server side
app.use(session({

  secret: 'example',
  resave: false,
  saveUninitialized: true,
  cookie: {
    sameSite: 'none',
    secure: true
  }
}));

app.use(cors({
  origin: ['https://ohmycounty.xyz'],    // client app's url 
  credentials: true
}));


const { users } = require('../../models');

module.exports = {
  post: (req, res) => {
    console.log(req.session.userid)
    const {
      email,
      password
    } = req.body;

    let session = req.session;

    users.findOne({
      where: {
        email: email,
        password: password
      }
    }).then(result => {
      if (!result) res.status(401).send(JSON.stringify({
        status: false
      }))
      else {
        session.userid = result.id;
        res.status(201).json({
          id: result.id
        })
      }
    })
  }
}

我在 chrome 开发者工具应用程序中找不到任何 connect.sid。

Chrome 应用程序

Chrome 网络 Cookie标头

等待有经验的开发者的建议。

任何意见都可以。

请帮我。

标签: node.jsexpresssessioncookiesaxios

解决方案


当且仅当通过 HTTPs 建立连接时,才应设置安全属性。所以如果你把它改成false,它应该可以在开发环境中工作。

  cookie: {
    secure: false
  }

来自快速会话文档:

cookie.secure 指定 Secure Set-Cookie 属性的布尔值。如果为真,则设置 Secure 属性,否则不设置。默认情况下,未设置 Secure 属性。

请注意,将此设置为 true 时要小心,因为如果浏览器没有 HTTPS 连接,兼容的客户端将来不会将 cookie 发送回服务器。

文档链接:https ://www.npmjs.com/package/express-session


推荐阅读