相关疑难解决方法(0)

为什么我会收到“通过指定其 SameSite 属性来指示是否在跨站点请求中发送 cookie”?

在 Chrome 警告中,它说“如果 cookie 应该在跨站点请求中发送,则指定 SameSite=None 和安全。这允许第三方使用。” 如何使用 express-session 正确执行此操作?

app.use(
  cors({
    credentials: true,
    origin: ["http://localhost:3000", "https://elated-jackson-28b73e.netlify.app"] //Swap this with the client url 
  })
);
var sess = {
  secret: 'keyboard cat',
  cookie: {}
}

if (app.get('env') === 'production') {
  app.set('trust proxy', 1) // trust first proxy
  sess.cookie.secure = true // serve secure cookies
  sess.cookie.sameSite = 'none'
}

app.use(session(sess))
Run Code Online (Sandbox Code Playgroud)

cookies express-session

47
推荐指数
1
解决办法
3万
查看次数

如何修复 Chrome 中的“由于用户偏好,此 Set-Cookie 被阻止”?(Stackoverflow SSO 登录/Ajax CORS 请求)

最近 Chrome 更新到 83.0.4103.116 版本似乎对 Cookie 处理带来了变化。

我为我的用户提供单点登录,让他们登录多个网站。与 Stackoverflow 类似,我正在使用 Jquery执行AJAX 请求

crossDomain: true, 
xhrFields: { withCredentials: true },
Run Code Online (Sandbox Code Playgroud)

在 PHP 中,我允许域:

// needed for cross-domain request
header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Credentials: true');
Run Code Online (Sandbox Code Playgroud)

但是,现在它不再起作用了。

在开发控制台中,我发现了一个带有工具提示的新警告:

“由于用户偏好,此 Set-Cookie 已被阻止”

镀铬警告工具提示

如何解决这个问题?



更新:

我只是看到 Stackoverflow 的单点登录也不再起作用了!

在此处输入图片说明



PS:一个相关问题建议告诉您的用户从我的 POV 更改 Chrome 设置,我想避免这种情况。试想一下,通知数百万用户启用 Cookie 进行单点登录……

php jquery google-chrome cross-domain

17
推荐指数
2
解决办法
2万
查看次数

Cookie 仅在 Chrome 中设置 - 不在 Safari、移动 Chrome 或移动 Safari 中设置

使用桌面浏览器(仅限 Chrome)时,我有一个有效的注册和登录端点,但当尝试使用移动浏览器注册或登录时,服务器超时。我怀疑这是因为我的会话 cookie 和 csurf cookie 没有随我的获取请求一起发送。

我在手机浏览器上打开了Safari开发,它没有显示任何cookie。我现在怀疑这是因为 MaxAge——

请注意,我的 api 和客户端位于不同的域:Heroku 和 Netlify。请参阅下面的代码:

CORS 选项

const options = {

  origin: "clientUrl",
  methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
  allowedHeaders: [
    "Content-Type",
    "Access-Control-Allow-Headers",
    "Access-Control-Allow-Origin",
    "Authorization",
    "csrf-token"
  ],
  exposedHeaders: [
    "Content-Type",
    "Access-Control-Allow-Headers",
    "Access-Control-Allow-Origin",
    "Authorization",
    "csrf-token"
  ],

  maxAge: 3600,
  preflightContinue: true,
  credentials: true
};
Run Code Online (Sandbox Code Playgroud)

CSURF配置

app.use(
  csurf({
    cookie: true,
    domain: "clientUrl",
    sameSite: "none"
  })
);
Run Code Online (Sandbox Code Playgroud)

快速会话配置

app.use(
  session({
    //This is our Encryption Key
    secret: process.env.sessionCode,
    //We set resave to false because our mongo store implements the "touch" …
Run Code Online (Sandbox Code Playgroud)

javascript cookies csrf cross-domain express

4
推荐指数
1
解决办法
2688
查看次数

无法使用 Netlify 和 Heroku 跨域设置/接收 cookie

我遇到了无法在浏览器中设置 cookie 的问题,因为客户端托管在 Netlify 上,服务器托管在 Heroku 上。它在本地主机上运行良好,所以看起来它现在与跨域有关。

阅读了多篇关于此的文章后,似乎这可能与 cors 或我如何设置 cookie 有关。

我在某处读到它可能有助于添加secure: truesameSite: "none"设置 cookie,所以我添加了它们,但没有帮助。我也尝试过domain在设置cookie时添加它,但不幸的是它也没有帮助。

我正在使用 Chrome,并已将设置从阻止第三方 cookie 更改为允许所有 cookie,因为我读到这有时可能是一个问题。然而它也没有产生任何新的结果。

我还读到,无论出于何种原因,它可能需要代理,或者可以通过在 Heroku 上托管客户端和服务器来解决这个问题。如果可能的话,我宁愿不做任何这些事情,但欢迎任何想法。

服务器端使用 Node js (express) 托管在 Heroku 上:

const express = require("express");
const app = express();
require("dotenv").config();
const cors = require("cors");
const mysql = require("mysql");
const jwt = require("jsonwebtoken");
const cookieParser = require("cookie-parser");

// port for heroku if needed
const PORT = 3001;

// app objects instantiated on creation of …
Run Code Online (Sandbox Code Playgroud)

cookies heroku node.js express reactjs

4
推荐指数
1
解决办法
3718
查看次数