我想从 sub.example.com 设置顶级域 cookie(即域:“.example.com”)。
我知道我必须像这样设置“域”属性:
const app = express();
app.get("/set", (req, res) => {
res.cookie("name", "express", { domain: '.example.com', path:'/', httpOnly:true, secure:true, sameSite:'lax' }).send("cookie sety");
});
但是当我从 sub.example.com(浏览器、邮递员等)访问页面时,它总是显示“domain: .sub.example.com”。
该网站在 Windows-Server、IIS 10、Node 20 上运行。
IIS 配置为绑定:sub.example.com、example.com(80 和 443)。
重写配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3528/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我不知道域名在什么时候被“重写”。我检查了网络、堆栈交换和副驾驶。找不到任何线索。
我找到了解决方案 - 我会尽力尽可能详细,也许它会对将来的某人有所帮助。
我的情况的问题:在回复标头“set cookie”中,域字段在回复流中的某个时刻被重写为实际域名,包括用于访问该站点的子域。独立于我在 express/nextjs 中发送的 cookie 域。
解决方案:IIS 使用 ARR 3.0(应用程序请求路由)——我并没有真正意识到这一点——默认为“响应标头中的反向重写主机”。这在网站配置中并不真正可见,因为它是在 IIS 服务器级别上配置的 - 我错过了查看。
要更改此设置...
现在,在调用站点时,您的标头将不会为实际用户域重写。就我而言,这就是我想要的,但请记住,您会更改所有网站的行为!因此,请仔细检查您是否没有创建新的错误。