我为什么会收到“通过指定SameSite属性来指示跨站点请求是否发送cookie”这个错误信息?

96

在Chrome的警告中,它说:

如果cookie应该被发送到跨站点请求,则指定SameSite=None和Secure。这将启用第三方使用。

我如何使用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))

8
你有没有得到这个问题的答案?@Squirrl 无法相信它已经有很多浏览量却没有回答! - Akhila
@Akhila 我没有。 - Squirrl
4
我发现这不是客户端的问题,而是在服务器端,如果你正在使用外部API,你无法控制这个问题。@Squirrl - Akhila
2
这应该是你问题的答案:https://dev59.com/gFEG5IYBdhLWcg3wZ8uh#66553425 - sandrabosk
与Fetch https://dev59.com/BlIH5IYBdhLWcg3wKqI7#72456007相关的问题。 - Vadim
3个回答

36

您看到此信息是因为您正在从另一个网站使用资源,并且该服务器正在尝试设置“cookie”,但它没有设置SameSite属性,这在新版本的浏览器中被报告。

如果您正在尝试从本地计算机(XAMPP)访问服务器页面,通常不会安装SSL,则也可能显示此问题;

请在服务器页面中设置标题行(如果使用PHP),如下所示:
header("Set-Cookie: cross-site-cookie=whatever; SameSite=None; Secure");

(请记住:必须从服务器端解决此问题。)


5
如果我的React应用程序出现此错误,有什么方法可以实现相同的功能吗? - Eklavya Chandra
@EklavyaChandra 当它在服务器上运行时,它应该被删除。 - Akshay K Nair
2
我应该在哪个文件中添加这段代码? - Cherryl Rarewings
@CherrylRarewings 这是要在服务器上设置的。如果您无法控制设置cookie的服务器,则无法做任何事情。您应该联系支持部门。 - Paul Razvan Berg

4
当我在本地主机运行我的代码时,我遇到了同样的问题。受影响的资源是来自 unpkg.com 的 _ga、_gid、_utma 和 _utmz。同时,我还收到了关于标记图像 leaflet 请求失败的通知,但这不会影响页面。
由于我不理解具体的问题,所以我只是在检查元素中删除了受影响的资源 cookie,然后代码就可以正常运行了,没有出现通知。
虽然我知道基于个人经验回答可能不是最好的选择,但请告诉我这是否对你有帮助。

1
如果您正在使用Google登录按钮或任何其他身份验证服务,请添加以下内容:
<GoogleLogin onSuccess={() =>()} onError={() => ()} cookiePolicy='single-host-origin'/>

我尝试了这个,但它不起作用,请问还有其他建议吗? - Edmund Dantes
请确保在您的应用程序组件中使用@react-oauth/google包中的<googleOauthprovider>进行封装,并提供您的客户端ID,例如:<googleoauthprovider clientId='your_id'> <component/> </googleoauthprovider>。 - Kartikeya Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接