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

2024-04-21

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

sameSite=None

Link: https://learn.microsoft.com/en-us/aspnet/samesite/system-web-samesite#net-versions-earlier-than-472 https://learn.microsoft.com/en-us/aspnet/samesite/system-web-samesite#net-versions-earlier-than-472

如上图所示,Microsoft 不为 4.7.2 以下的版本提供对此属性的内置支持。

所以,我们无法在服务器端创建cookie时设置它。

我们有什么可能的方法可以使用 SameSite 属性创建 cookie 吗?


UPDATE:

假设您安装了 IIS 的 URL 重写扩展 2.0(Azure 应用服务、需要 Azure 网站,已经安装了)那你应该看看@sreenath的答案 https://stackoverflow.com/a/63918217/159145因为该解决方案应该适用于大多数用户。

然而 (在我的象牙塔内的特权位置,在一个巨大的自负泡沫中) 没有任何借口任何项目尚未使用 .NET Framework 4.7.2 或更高版本,因为过去 5 年多的 .NET Framework 更新(Visual Studio 2013 及以后)在很大程度上是附加的和向后兼容的。因此,我强烈敦促开发人员(尝试)首先将他们的项目更新到 .NET Framework 4.7.2 或 4.8在尝试使用 IIS Rewrite 等黑客方法之前SameSitecookie 参数。

我原来的答案:

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

简而言之:你不能。

您链接到的文章 https://learn.microsoft.com/en-us/aspnet/samesite/system-web-samesite#net-versions-earlier-than-472解释原因(强调我的):

Microsoft 不支持低于 4.7.2 的 .NET 版本用于写入同站点 cookie 属性。我们有not找到了一种可靠的方法:

  • 确保根据浏览器版本正确写入属性。
  • 拦截并调整旧框架版本上的身份验证和会话 cookie

唯一的解决方案是将项目升级到 .NET Framework 4.7.2 或更高版本。

但好消息是,从 .NET Framework 4.5 升级到 4.7.2 很容易,向后兼容性问题(如果有的话)也很少。你甚至不需要改变你的任何东西web.config文件(即您仍然可以将 ASP.NET WebForms 4.5 与 .NET Framework 4.8 一起使用)。

您需要做的就是:

  1. 进行新的 git 提交。
  2. 打开你的.csproj记事本中的文件。
  3. Change <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> to <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
  4. Save.
  5. 在 Visual Studio 中重新打开您的项目/解决方案,然后单击“重建”。

根据我的经验,您会遇到的唯一问题是:

  • 需要刷新/重新安装 NuGet 包,因为 NuGet 确实无法轻松处理目标框架更改。这很容易解决(只需核爆你的packages目录)。
  • 非 NuGet 依赖项(例如老式的 WinForms 组件,嗯)具有特殊的安装步骤,由于某种原因,这些步骤对特定的 .NET Framework 版本有严格的依赖 - 在这种情况下,如果您的组件供应商不这样做,我会感到非常惊讶没有更新。

当然我还是会骂你们产品经理因为无法确保他们的项目保持正常运转7年(.NET Framework 4.5.2 于 2013 年发布)。为什么没有 CI 管道设置来自动处理这个问题?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 4.7.2 之前的 .Net Framework 设置 cookie 属性 Samesite = None(对于 4.5.2) 的相关文章

  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • for 循环 - 没有效果的语句

    由于某种原因 我收到错误 statement with no effect关于这个声明 for j idx j lt iter j increment printf from loop idx i int idx punc ctxt j 你
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 编写专门用于类及其子类的函数模板

    我正在尝试编写一个函数模板 一个版本应该用于不满足另一版本标准的所有类型 当参数是给定类的基类或该类本身时 应使用另一个版本 我尝试过超载Base 但是当类派生自Base 他们使用通用的 而不是特定的 我也尝试过这种 SFINAE 方法 s
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 宏观评价[重复]

    这个问题在这里已经有答案了 可能的重复 未定义的行为和序列点 https stackoverflow com questions 4176328 undefined behavior and sequence points 我无法理解以下宏
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • C++0x 中的新 unicode 字符

    我正在构建一个 API 它允许我获取各种编码的字符串 包括 utf8 utf16 utf32 和 wchar t 根据操作系统 可能是 utf32 或 utf16 新的 C 标准引入了新类型char16 t and char32 t没有这么

随机推荐