因此,作为我网站支付过程的一部分,我必须访问 ExternalURL 来验证某些字段,并且由于验证完成,我将收到一个带有一些响应变量的返回到我的 Action Method 的 POST。我面临的问题是,即使我尝试了以下步骤,cookie 也无法持续存在。
- 已为 cookie 显式分配 SameSite 标志为 Lax。
- 已经对我将在下面包含的 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 框架更新前后的变化。
在此先感谢您的帮助!!!