c# - 如何为 4.7.2 之前的 .Net Framework 设置 cookie 属性 Samesite = None(对于 4.5.2)

标签 c# .net google-chrome cookies samesite

根据 Google Chrome 最近的更新,它只允许具有属性的跨平台 cookie

sameSite=None
enter image description here
链接:https://docs.microsoft.com/en-us/aspnet/samesite/system-web-samesite#net-versions-earlier-than-472
根据上图,Microsoft 不为低于 4.7.2 的版本提供此属性的内置支持。
因此,我们无法在服务器端创建 cookie 时设置它。
有什么可能的方法可以使用 SameSite 属性创建 cookie?

最佳答案

更新:
假设你已经安装了 IIS 的 URL Rewrite Extension 2.0(Azure App Services,nee Azure Websites,已经安装了)then you should look at @sreenath's answer因为该解决方案应该适用于大多数用户。
但是(在我的象牙塔内,我在一个巨大的自负泡沫中处于特权地位)没有任何项目没有使用 .NET Framework 4.7.2 或更高版本,因为 .NET Framework 在过去 5 年多的时间里更新(Visual Studio 2013 年以后)在很大程度上是附加的和向后兼容的。 所以我强烈敦促开发人员(尝试)首先将他们的项目更新到 .NET Framework 4.7.2 或 4.8 在尝试使用 IIS 重写来设置 SameSite 之类的黑客之前cookie 参数。
我的原答案:

How to set cookie attribute Samesite = None for .Net Framework earlier of 4.7.2 (for 4.5.2)


简单地说:你不能。
The article you linked to解释原因(强调我的):

Microsoft does not support .NET versions lower that 4.7.2 for writing the same-site cookie attribute. We have not found a reliable way to:

  • Ensure the attribute is written correctly based on browser version.
  • Intercept and adjust authentication and session cookies on older framework versions

唯一的解决方案是将您的项目升级到 .NET Framework 4.7.2 或更高版本。
但好消息是,从 .NET Framework 4.5 升级到 4.7.2 很容易,向后兼容性问题极少(如果有的话)。您甚至无需更改 web.config 中的任何内容文件(即您仍然可以将 ASP.NET WebForms 4.5 与 .NET Framework 4.8 一起使用)。
您需要做的就是:
  • 进行新的 git 提交。
  • 打开您的 .csproj记事本中的文件。
  • 更改 <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion><TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
  • 节省。
  • 在 Visual Studio 中重新打开您的项目/解决方案,然后单击重建。

  • 根据我的经验,您将遇到的唯一问题是:
  • 需要刷新/重新安装 NuGet 包,因为 NuGet 确实不能轻松处理目标框架更改。这很容易修复(只需清除您的 packages 目录)。
  • 具有特殊安装步骤的非 NuGet 依赖项(例如老式 WinForms 组件,ew)由于某种原因对特定的 .NET Framework 版本有严格的依赖性 - 在这种情况下,如果您的组件供应商没有,我会感到非常惊讶没有更新。

  • 当然,我仍然会责备你们的产品经理没有确保他们的项目在 中保持正常工作状态。七年 (因为 .NET Framework 4.5.2 于 2013 年发布)。为什么没有设置 CI 管道来自动处理这个问题?

    关于c# - 如何为 4.7.2 之前的 .Net Framework 设置 cookie 属性 Samesite = None(对于 4.5.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63793828/

    相关文章:

    c# - windows phone子控怎么清除背景

    c# - 从 windows 7 上的 windows 服务读取 HKLM

    .net - 如何防止应用程序在调试/测试期间与外界通信?

    javascript - 在方法中使用 "Uncaught reference"时,ES6 类中出现 `for of` 错误

    jquery - 根据浏览器窗口动态更改表格大小

    c# - 在哪里定义 DbContext

    c# - 是否可以在这段代码中避免使用多个 IF?

    c# - C#中使用属性缓存方法的返回结果

    .net - 如何将此巴科斯范式表达式转换为正则表达式 (.Net)?

    html - 按钮背景颜色未显示在边缘,但适用于 Firefox 和 Chrome