ASP.NET 使用 Apache 作为反向代理时,Core Razor 无法设置 cookie

ASP.NET Core Razor unable to set cookies when using Apache as reverse proxy

我正在使用 Apache 作为反向代理在 CentOS 上托管我的 ASP.NET Core Razor 应用程序。我可以使用我的域访问该网站,但是无论我做什么,该应用程序都无法在我的浏览器中设置 cookie。

这是我 startup.cs 中 headers 的配置:

services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.KnownProxies.Add(IPAddress.Parse("x.x.x.x"));
            options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        });

app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });

        app.UseAuthentication();

这是 apache httpd.conf 文件中的虚拟主机配置:

  <VirtualHost *:80>
ServerName mysite.com
ServerAlias subdomain.mysite.com
ServerAdmin webmaster@mysite.com

ProxyPreserveHost On
ProxyPass / http://localhost:5001/ retry=0
ProxyPassReverse / http://localhost:5001/ retry=0
</VirtualHost>

我使用此代码设置 cookie,但无法正常工作:

 public IActionResult OnPost()
        {
Response.Cookies.Append("mycookie", "cookie-value");
                            return RedirectToPage("/Index");
}

我不确定我做的每件事是否正确,也许我哪里出错了,但事实是我的应用程序在本地主机上运行良好并且也能够设置 cookie。

好的,我找到了答案,我不敢相信这么简单。在我的 Startup.cs 文件中,我设置了 cookie 策略:

services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

因为在开发模式期间我一直在使用该应用程序,并且在初始阶段我已授予设置 cookie 的权限,但不久之后我删除了代码需要由用户将权限设置为 true,因为它是开发阶段。

我刚刚把上面改成这样:

services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

现在可以毫无问题地设置 cookie。