ExpressJS/NodeJS - Iphone 未在标头中设置 cookie,适用于 Android 设备

问题描述 投票:0回答:1

我有一个服务器端代码,使用 express.js 来处理会话和 cookie; 对于我的客户端代码,我使用 axios 来帮助管理 cookie 和会话:

服务器端代码(express.js):

app.use(cors({
    origin: ["www.1.com", "www.2.com", "www.3.com"],
    credentials: true,
    allowedHeaders: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept'],
    methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'],
    preflightContinue: true
}))
app.set('trust proxy', 1)
app.use(cookieParser("cookie-secret"))
app.use(session({
    secret: "cookie-secret",
    resave: false,
    saveUninitialized: process.env.NODE_EV==="production",
    store: MongoStore.create({
        mongoUrl: "url",
        autoRemove:'interval',
        autoRemoveInterval: 10
    }),
    cookie: {
        secure: true,
        httpOnly: true,
        sameSite: 'none',
        maxAge: 1000 * 60 * 60 * 24
    }
}));

客户端代码(axios):

import axios from 'axios'

const instance = axios.create({
    baseURL: process.env.REACT_APP_BACKEND_URL,
    headers: { 'Content-Type': 'application/json' },
    withCredentials: true,
});

export default instance;

客户端代码(使用):

import instance from '../axiosAPI';

useEffect(() => {
    async function fetchQR() {
      try {
        const response = await instance.get("url");
        setItems(response?.data?.data || []);
        setLoaded(true);
      } catch (error) {
        console.log(error);
      }
    }
    fetchQR();
  }, []);

当我在 Android 设备上运行代码时,它工作正常;然而,一旦在 iPhone 上测试,它似乎不起作用......

在检查客户端发送的请求时,cookie和session都被记录下来,但它并没有在标头中发送cookie:

前端代码:

来自Android/Windows的请求:

"headers": {
      "accept": "application/json, text/plain, */*",
      "accept-encoding": "gzip",
      "accept-language": "en-GB,en;q=0.9,en-US;q=0.8",
      "cdn-loop": "ye",
      "cf-connecting-ip": "1.1.1.1",
      "cf-ew-via": "15",
      "cf-ipcountry": "AU",
      "cf-ray": "7f95c282c5a72efa-MEL",
      "cf-visitor": "{\"scheme\":\"https\"}",
      "cf-worker": "serverbackend.com",
      "content-length": "18",
      "content-type": "application/json",
      "cookie": "connect.sid=gomgom",
      "host": "www.serverbackend.com",
      "origin": "www.1.com",
      "priority": "u=1, i",
      "referer": "www.1.com",
      "render-proxy-ttl": "4",
      "sec-ch-ua": "\"Not/A)Brand\";v=\"99\", \"Microsoft Edge\";v=\"115\", \"Chromium\";v=\"115\"",
      "sec-ch-ua-mobile": "?0",
      "sec-ch-ua-platform": "\"Windows\"",
      "sec-fetch-dest": "empty",
      "sec-fetch-mode": "cors",
      "sec-fetch-site": "cross-site",
      "true-client-ip": "1.1.1.1",
      "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203",
      "x-forwarded-for": "2.2.2.2, 3.3.3.3, 4.4.4.4",
      "x-forwarded-proto": "https",
      "x-request-start": "1692483374752209"
    },

"session": {
      "auth": {
        "email": "[email protected]",
        "user_id": "63d61ea63b02b90e9fa6006b",
        "username": "newnew"
      },
      "cookie": {
        "expires": "2023-08-20T21:48:51.458Z",
        "httpOnly": true,
        "originalMaxAge": 86400000,
        "path": "/",
        "sameSite": "none",
        "secure": true
      }
    },
    "sessionID": "DQfeslKPa8nSiJ5zdaJCuSc2RzXtztRw"
}

来自 iPhone 的请求:

"headers": {
      "accept": "application/json, text/plain, */*",
      "accept-encoding": "gzip",
      "accept-language": "en-US,en;q=0.9",
      "cdn-loop": "ye",
      "cf-connecting-ip": "1.1.1.1",
      "cf-ew-via": "15",
      "cf-ipcountry": "US",
      "cf-ray": "7f95c8cdb19e8214-IAD",
      "cf-visitor": "{\"scheme\":\"https\"}",
      "cf-worker": "serverbackend.com",
      "host": "www.serverbackend.com",
      "origin": "www.1.com",
      "referer": "www.1.com",
      "render-proxy-ttl": "4",
      "true-client-ip": "1.1.1.1",
      "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1",
      "x-forwarded-for": "2.2.2.2, 3.3.3.3, 4.4.4.4",
      "x-forwarded-proto": "https",
      "x-request-start": "1692483632436366"
    },
"session": {
      "cookie": {
        "expires": "2023-08-20T22:20:32.440Z",
        "httpOnly": true,
        "originalMaxAge": 86400000,
        "path": "/",
        "sameSite": "none",
        "secure": true
      }
    },
    "sessionID": "N5Mo3R9keK3coTYMmjoZVqxIUi18vM_g",
}

我在渲染上运行服务器端代码(https://render.com/),我的客户端代码托管在(https://www.netlify.com/)。

有人知道问题是什么并且可以指出我正确的方向吗?

非常感谢您的宝贵时间

android ios node.js cookies axios
1个回答
0
投票

我也遇到同样的问题,请问有解决办法吗?

© www.soinside.com 2019 - 2024. All rights reserved.