0

因此,作为我网站支付过程的一部分,我必须访问 ExternalURL 来验证某些字段,并且由于验证完成,我将收到一个带有一些响应变量的返回到我的 Action Method 的 POST。我面临的问题是,即使我尝试了以下步骤,cookie 也无法持续存在。

  1. 已为 cookie 显式分配 SameSite 标志为 Lax。
  2. 已经对我将在下面包含的 Web.config 进行了一些更改。

我修改的 Web.config 的一部分。

  <system.web>
    <authentication mode="None">
      <forms cookieSameSite="Lax" requireSSL="false" />
    </authentication>
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2" executionTimeout="500" />
    
    <!-- Added this line for restoring Cookie values after the redirect to an external URI. -->
    <httpCookies requireSSL="true" />
    <sessionState cookieSameSite="None" cookieless="false" timeout="360" />    
  </system.web>

  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="2147483647" />
      </webServices>
      <scriptResourceHandler enableCaching="false" enableCompression="false" />
    </scripting>
  </system.web.extensions>

 <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <!--<rewrite>
      <outboundRules>
        <clear />
        <rule name="Add SameSite" preCondition="No SameSite">
          <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
          <action type="Rewrite" value="{R:0}; SameSite=lax" />
        </rule>
        <preConditions>
          <preCondition name="No SameSite">
            <add input="{RESPONSE_Set_Cookie}" pattern="." />
            <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=lax" negate="true" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>-->
  </system.webServer>

我们调用外部 URL 的方法有这段代码。

HttpCookie ckpaymentTRID = new HttpCookie("PaResTransactionID");
ckpaymentTRID.Value = resultPaymentObj.TransactionID.ToString();
ckpaymentTRID.SameSite = System.Web.SameSiteMode.Lax;
ckpaymentTRID.Secure = true;

HttpContext.Response.Cookies.Add(ckpaymentTRID);

我从外部 URL 接收 POST 的方法包括这个

var SomeCookiee = HttpContext.Request.Cookies["PaResTransactionID"];

此外,我在这里浏览了这篇文章,并了解 .NET 框架更新前后的变化。

在此先感谢您的帮助!!!

4

1 回答 1

0

转而所有 web.config 设置更改都无关紧要,因为其余的实际上足以进行削减。这实际上是我如何得到关于如何解决这个问题的提示:

当我从我的应用程序重定向到外部 URL ......在谷歌浏览器中,在开发工具下你可以看到已经通过的 cookie......我总是收到一个警告说“因为你的 cookie不是安全cookie,chrome 默认将SameSite设置从None更改为Lax,因此您的 cookie 根本不会在整个请求过程中持续存在。”..... 然后提示我更改 Web 应用程序设置以运行https://localhost 而不是 VS2019 中的 http://localhost。一旦我这样做了,我发现我不再需要显式的HttpCookiesessionState要修改或实际上放置在 web.config 中的设置和 Cookie 值仍然存在,尽管有外部域重定向。

于 2020-08-10T08:10:07.540 回答