【问题标题】:Cookie SameSite property works on localhost but not after publishing to serverCookie SameSite 属性在 localhost 上有效,但在发布到服务器后无效
【发布时间】:2020-10-09 21:41:57
【问题描述】:

我已经使用 .NET 4.7.2 的 ASP MVC 使用以下代码在服务器端设置 cookie:

            ClientCookie = new HttpCookie("SuperCookie");
            ClientCookie.Value = dbNewCustomerCookie.CustomerCookieID.ToString(); // new inserted DB value
            ClientCookie.Expires = DateTime.Now.AddYears(2);
            ClientCookie.HttpOnly = true;
            ClientCookie.Secure = true;
            ClientCookie.Shareable = true;
            ClientCookie.SameSite = SameSiteMode.None;
            Response.SetCookie(ClientCookie);
            Response.Flush();

虽然在 localhost 上工作正常并且 SameSite 设置为 None,但在将其推送到服务器后,SameSite 标志在每次请求后都会取消设置。本地主机和服务器版本都通过 HTTPS 运行。检查服务器上的 .NET 版本,已删除要重新创建的 cookie,尝试在服务器上使用不同的 web.config 设置,还尝试使用 URL 重写模块,但没有任何效果。

这可能是代码问题还是服务器/主机问题?我们正在使用 Amazon(可以访问 IIS 的私有服务器)来托管我们的网站。

更新:在服务器 localhost 上运行站点始终将 SameSite 返回为空,而开发机器始终返回 SameSite 设置为 None。两台机器都安装了 .NET 4.7.2,在 IIS 7 上使用相同的 web.config 运行。

更新 2:如果我设置 ClientCookie.SameSite = SameSiteMode.Lax 那么它也适用于服务器请求;但无法将模式设置为 SameSiteMode.None。在 Lax 模式下,不会为跨站点请求创建 cookie,这是必需的,因为我从 iframe 调用网站。

更新 3:我认为这是因为服务器没有更新支持相同站点的最新功能,因为没有:https://docs.microsoft.com/en-us/aspnet/samesite/kbs-samesite,因为公司不会更新服务器(内部政策)我会尝试从客户端设置cookie

【问题讨论】:

    标签: asp.net-mvc cookies samesite


    【解决方案1】:

    如果服务器不支持SameSite=None 属性值,您可以尝试直接发送Set-Cookie 标头。

    Response.AppendHeader("Set-Cookie",
      "SuperCookie=" + dbNewCustomerCookie.CustomerCookieID.ToString()
      + "; Max-Age=63113904"
      + "; HttpOnly"
      + "; Secure"
      + "; SameSite=None"
    );
    

    【讨论】:

    • 修复是在客户端设置cookie。我尝试直接在标头上添加 cookie,并将 cookie 发送到客户端,但没有 SameSite 属性。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多