我目前正在Heroku上尝试托管一个网站,我部署了后端,您可以考虑使用yyyy.herokuapp.com
,前端可以考虑使用xxxx.herokuapp.com
,
现在,这里的问题,我需要设置xxxx
和yyyy
之间的cookie,我知道这将是一个巨大的安全问题,但由于这是一个实验网站,我不愿意得到一个自定义域,我试图设置cookie的域:一米四氮一x一米五氮一x一米六氮一x一米七氮一x一米八氮一x。
然而,它不工作,chrome拒绝cookie,并给出以下消息:
通过Set-Cookie标头设置Cookie的尝试被阻止,因为其Domain属性对于当前主机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')
1条答案
按热度按时间dfty9e191#
如果
herokuapp.com
不是 *public后缀 *(也称为 * 有效顶级域 * 或 eTLD),则在xxxx.herokuapp.com
使用Domain=herokuapp.com
设置cookie的情况下,浏览器会将该cookie发送到yyyy.herokuapp.com
然而,有一个障碍:为了隔离不同的租户,Heroku不久前要求
herokuapp.com
be added to the public-suffix list。大多数浏览器拒绝为公共后缀设置cookie:出于安全原因,许多用户代理被配置为拒绝与“公共后缀”对应的域属性。例如,一些用户代理将拒绝“com”或“www.example.com“的域属性co.uk。
因此,正如您所经历的那样,使用
Domain=herokuapp.com
设置cookie的尝试将被浏览器拒绝。注意:在
Set-Cookie
HTTP头的Domain
属性中添加前导点没有任何效果,至少在现代浏览器中是这样。为了摆脱这个困难,你可以简单地买一个便宜的域名(比如
infinityvive.com
),从它的子域服务于你的前端和后端,然后你就可以使用Domain=infinityvive.com
,因为你的域名不会是一个公共后缀。