在重定向到ASP.NET MVC中的第三方URL后,如何维护会话?

问题描述

在实际重定向到第三方URL之前,我们基本上是在Session中存储用户的会话ID,用户ID等,因此当我们返回返回URL以发布付款网关的数据时,我们将需要通过检索用户会话,此时我们的会话已清除/为空。 Chrome在84以上的版本中会发生这种情况。因为在Firefox浏览器中重定向后,我仍然能够维护用户会话。 无论Chrome版本如何,我也都希望这样做。重定向后如何维护每个用户的会话?

注意:

  1. 我尝试过通过全局声明字典并在重定向之前在其中填充值来尝试字典。但这也会得到错误,即在bck后返回URL找不到密钥。
  2. 我尝试通过针对发送给第三方URL的txnid存储用户信息来尝试会话,它会将我们发送回返回的URL,并且返回null。
  3. 无法为每个用户数据库中存储会话,因为它将创建问题并已加载到数据库

可以尝试其他任何选择。请帮忙。我正在使用ASP.NET MVC。

解决方法

You need to set a SameSite cookie policy

Chrome enforces the new SameSite cookie rules more stringently than Firefox,but Firefox will soon behave the same as Chrome

您应使用的确切SameSite选项取决于重定向的类型:

  • 如果重定向是使用GETPOST的HTTP 3xx重定向,并且所有请求都通过HTTPS,则可以使用SameSite=None
  • 如果“重定向”是由客户端<meta>元素或使用window.location = 'newUrl'的JavaScript启动的,则可以使用SameSite=None
  • 如果重定向是使用GET的HTTP 3xx重定向,并且并非所有请求都通过HTTPS,则可以使用SameSite=Lax
  • 如果重定向是使用POST的HTTP 3xx重定向,并且并非所有请求都通过HTTPS进行,则没有快速修复:您将需要对所有请求使用HTTPS。

{。{1}}选项已添加到.NET Framework 4.7.2中的ASP.NET WebForms和ASP.NET MVC中,尽管您应该使用.NET Framework 4.8。如果您无法将项目更新到.NET Framework 4.7.2或更高版本,then you can use a trick with IIS' <rewrite> rules to modify response Set-Cookie requests


You can configure defaults for SameSite in your web.config file,但您需要更新几个不同的位置:

  • 直接使用SameSite时指定<system.web><httpCookies sameSite="Strict|Lax|None|Unspecified" />
  • 为ASP.NET自己的会话cookie指定HttpCookie这是OP的问题)。
    • 请注意,您不能为<system.web><sessionState cookieSameSite="Strict|Lax|None" />指定Unspecified-但永远不要使用<sessionState>,这样就不会成为问题({Unspecified只需要{{3 }},因为Apple Safari当时无法识别Unspecified,但今天没有人应该使用iOS 12。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...