繁体   English   中英

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

[英]How to maintain session after redirection to 3rd party URL in ASP.NET MVC?

在实际重定向到第 3 方 url 之前,我们基本上将用户的会话 id、userid 等存储在 Session 中,因此当我们返回返回 url 以发布支付网关的数据时,我们将需要通过检索用户的会话来更新状态,在这一点上,我们的会话被清除/为空。 这发生在 84 以上版本的 Chrome 中。因为我也能够在重定向后在 Firefox 浏览器中维护用户会话。 无论 chrome 版本如何,我也想做同样的事情。 重定向后如何维护每个用户的会话?

笔记:

  1. 我已经尝试通过全局声明字典并在重定向之前在其中填充值来尝试字典。 但这也会导致在 post bck 返回 url 后找不到密钥的错误。
  2. 我已经尝试通过将用户的信息与我发送到第 3 方 url 的 txnid 相比较来尝试会话,它将我们发送回返回 url 并且结果为空。
  3. 无法在数据库中为每个用户存储会话,因为它会创建 prob 并加载到 db。

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

需要设置SameSite cookie 策略

Chrome 比 Firefox 更严格地执行新的SameSite cookie 规则,但 Firefox 很快将与 Chrome 相同

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

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

SameSite选项已添加到 .NET Framework 4.7.2 中的 ASP.NET WebForms 和 ASP.NET MVC,但您应该使用 .NET Framework 4.8。 如果您无法将项目更新到 .NET Framework 4.7.2 或更高版本,那么您可以使用带有 IIS 的<rewrite>规则的技巧来修改响应Set-Cookie requests


您可以在 web.config 文件中为SameSite配置默认值,但您需要更新几个不同的位置:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM