簡體   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