如何在两个 Heroku 域之间设置 cookie?

How do I set cookies between two Heroku domains?

我目前正尝试在 Heroku 上托管一个网站作为实验,我部署了您可以考虑的后端 yyyy.herokuapp.com 和您可以考虑的前端 xxxx.herokuapp.com,

现在,问题来了,我需要在 xxxxyyyy 之间设置 cookie,我知道这将是一个巨大的安全问题,但由于这是一个实验性网站,我不愿意获取自定义域,我尝试将 cookie 的域设置为:herokuapp.com.herokuapp.com*.herokuapp.comxxxx.herokuapp.comyyyy.herokuapp.com.

但它不起作用,chrome 拒绝 cookie 并给出此消息:

This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url.

那么,如何在不需要自定义域的情况下解决这个问题? 这是我设置 cookie 的配置(在使用 flask 的后端)

response.set_cookie("example_cookie", value="cookie value", 
    max_age=900, expires=datetime.datetime.utcnow() + 
    datetime.timedelta(seconds=900), secure=True, domain=".herokuapp.com", 
    samesite='none')

如果herokuapp.com不是public后缀(a.k.a。一个有效top-level域),那么如果 cookie 是用 Domain=herokuapp.com.

设置的,那么浏览器确实会将 xxxx.herokuapp.com 设置的 cookie 发送到 yyyy.herokuapp.com

但是,有一个障碍:为了隔离不同的 Heroku 应用程序,herokuapp.com was added to the public-suffix list. Most browsers refuse to set a cookie for a public suffix:

For security reasons, many user agents are configured to reject Domain attributes that correspond to “public suffixes”. For example, some user agents will reject Domain attributes of “com” or “co.uk”.

因此,如您所见,尝试使用 Domain=herokuapp.com 设置 cookie 将被浏览器拒绝。 (注意:在 Set-Cookie HTTP header 的 Domain 属性中添加前导点没有任何效果。)

要摆脱这个困难,您可以简单地购买一个便宜的域名(例如 infinityvive.com),以通过它的子域为您的前端和后端提供服务。然后您就可以使用 Domain=infinityvive.com,因为您的域不会是 public 后缀。