我有一个托管在域b.example.com
上的AWS Lambda,它通过对a.example.com
的{{1}}标头向位置set-cookie
发送302重定向响应。
Domain=example.com
浏览器在请求headers: {
"location": [{ key: "Location", value: 'a.example.com'}],
"set-cookie": [{
key: "Set-Cookie",
value: `cookie.name=cookie-value; Domain=example.com; Max-Age=${maxAge}; SameSite=Strict; Secure; HttpOnly`
}]
},
status: "302",
statusDescription: "redirect"
时保存cookie(不拒绝),但不发送带有请求标头的cookie。仅当我设置了b.example.com
时,它才发送cookie。问题是SameSite=Lax
是否不适用于子域?使它起作用的唯一方法是使用SameSite=Strict
模式吗?
其他详细信息
我尝试使用2个简单的Lax
应用在本地(不包括AWS)复制相同的场景。一个写响应的cookie,另一个读它。
express.js
这些也是在// generator
app.get('/', (req, res) => {
res.cookie('cookie-name', 'cookie-value', {
domain: 'example.com',
httpOnly: true,
path: '/',
sameSite: 'Strict',
secure: true
});
res.redirect('https://b.example.com:3001');
});
// reader
app.get('/', (req, res) => {
res.send(`cookies in req ${JSON.stringify(req.cookies)}`);
});
和https://a.example.com
上托管的2个单独的应用程序,带有自签名证书和全部。两个子域都指向127.0.0.1。与此相同的是,它可以解决任何麻烦。
是否有这种差异的原因?