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

如何解决在重定向到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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?