簡體   English   中英

Session 在 Codeigniter 中從 PayU 支付網關重定向后隨機銷毀 4

[英]Session destroy randomly after redirection from PayU payment gateway redirection in Codeigniter 4

這個問題是在過去兩天嘗試了很多解決方案之后發布的,但沒有任何效果。 Session 在我的 Codeingiter 4 項目中表現異常。 我的應用程序中有一個支付模塊,PayU 是我的支付網關提供商。 支付網關重定向后,PayU 將在我的 URL 中發布一些響應數據。此時 session 自動銷毀。 我不知道為什么,為了您的理解,它正在發生,因為它不是每次都發生,比如 10 次 session 將在成功付款后銷毀 7 次。 我從我的 controller 中的 PayU 得到了所有響應。如果付款被使用取消,頻率大約是 10 次嘗試中的 5 次。 無論支付狀態如何,此問題僅在從 PayU 支付網關重定向后發生。 我嘗試了這個這個這個這個以及除 StackOverflow 之外的許多其他網站。

我在 AlmaLinux 8 中使用 Open LiteSpeed 服務器。我在我的虛擬服務器配置文件中添加了它

context / {
    location    $DOC_ROOT/
    allowBrowse    1
    extraHeaders  header edit set-cookie $1;httponly;secure;samesite=none
  }

My.htaccess 文件不包含除用於從 URL 隱藏公共的重寫規則之外的任何內容。

這是我的.env

app.sessionDriver = 'CodeIgniter\Session\Handlers\DatabaseHandler' // Initially it was FileHandler
app.sessionCookieName = 'ci_session'
app.sessionExpiration = 7200
app.sessionSavePath = ci_sessions
# app.sessionMatchIP = false
app.sessionTimeToUpdate = 300
# app.sessionRegenerateDestroy = false

# app.CSPEnabled = false
// Initially all the cookie preferences are commented out experimented with different values.
cookie.prefix = ''
cookie.expires = 7200
cookie.path = '/'
cookie.domain = '<domain_name>'
cookie.secure = true
# cookie.httponly = false
cookie.samesite = 'none' // I tried Lax also
# cookie.raw = false

security.csrfProtection = 'cookie'
security.tokenName = 'csrf_token_name'
security.headerName = 'X-CSRF-TOKEN'
security.cookieName = 'csrf_cookie_name'
security.expires = 7200
security.regenerate = true
security.redirect = true
security.samesite = 'Lax'
curlrequest.shareOptions = true

我在我的 BaseController 中試過這個

public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        // Preload any models, libraries, etc, here.

        $this->session = \Config\Services::session();
        session();
    }

我在我的 php.ini 中添加了這一行

session.auto_start = 1

付款后,PayU 將回復此 function ,我使用的是 PHP 7.4、Codeigniter 4.1.5 和 Litespeed 1.7.14。

更新

我將 Codeingiter 版本更新到 4.2.3 最新版本,但沒有解決此問題。

PayU給出的答復是,

TLDR - In Chrome v.84 SameSite cookie attribute is released which if not handled by the server may lead to an issue causing loss of session data or session ID gets NULL.The issue where cookies are getting NULL in return journey is occurring with chrome browser 84+版本。對於cookies,PayU端沒有限制。

解決方案建議:chrome 84 安全更新表明 cookie 的 SameSite 屬性默認為 Lax(允許 GET 請求),如果我們希望 cookie 傳輸,則應明確標記 SameSite: None 和“Secure”。 (參考https://web.dev/samesite-cookies-explained/

Session getting null or getting destroyed during the transaction is not happening due to PayU but Chrome has updated some cache and cookies policy in their last update v84, same has to be implemented in your session.

PayU 對 session 沒有任何作用,如果您在 Mozilla 上嘗試相同的操作,它將在那里工作,您將不會遇到任何 null session 問題。

請在 Chrome 論壇上找到以下可用點來復制此問題。

在沒有設置SameSite屬性的情況下,設置了與跨站點資源關聯的 cookie。 它已被阻止,因為 Chrome 現在只提供帶有跨站點請求的 cookies 如果它們設置為SameSite=NoneSecure 您可以在應用程序>存儲>Cookies 下的開發人員工具中查看 cookies,並在和查看更多詳細信息。

請找到以下解決此問題的方法:

cookies 在回程中得到 NULL 的問題發生在 chrome 瀏覽器 84+ 版本中。 對於 cookies,PayU 端沒有限制。 解決方案建議:chrome 84 安全更新表明 cookie 的 SameSite 屬性默認為 Lax(允許 GET 請求),如果我們希望 cookie 傳輸,則應明確標記 SameSite: None 和“Secure”。 (參考https://web.dev/samesite-cookies-explained/

• SameSite cookies 說明 了解如何使用 SameSite 屬性標記您的 cookies 以供第一方和第三方使用。 您可以通過使用 SameSite 的 Lax 和 Strict 值來增強站點的安全性,以提高對 CSRF 攻擊的保護。 指定新的 None 屬性允許您明確標記 cookies 以供跨站點使用。 web.dev

如果在您進行更改后,session id 是否為 NULL,請與您的技術團隊核實,以返回商戶網站。 如果 session id 是 Null,請在下面的 RCA 上找到 chrome 瀏覽器 84 版本的問題。

這是為了通知您 Chrome 在最新更新 v.84 中發布的更改及其對事務處理的影響。 以下是相同的詳細信息。

泛印度的事件參考 Session header 響應后付款中缺少 ID,導致 session 數據丟失。 PayU 的一些商家提出了 session 在高於 v84 版本的 Chrome 瀏覽器上處理交易時丟失的擔憂。 此問題是由於 Chrome 更改 Cookie 政策而引起的。 當用戶跨多個域移動時,這些更改會阻止 cookies 保留,從而導致用戶丟失 session。

交易影響高

受影響地區的生產和 UAT

事件處理的簡短描述 Q.1 Chrome SameSite Cookie 策略如何影響我的瀏覽器重定向集成? 在 Chrome v.84 中,SameSite cookie 屬性已發布,如果服務器不處理該屬性,可能會導致問題導致 session 數據丟失或 session ID 獲取 Z6C3E226B4D4795D29ZEC4EC。 商戶最終可能會遇到不完整訂單的突然激增 Q.2 關於 Chrome 的SameSite Cookie 政策 對於運行 Chrome v.84 及更高版本的用戶,Chrome 正在實施一個默認安全的 cookie 分類系統,將未聲明SameSite值的 cookies 處理為SameSite=Lax松弛 cookies。 只有設置為SameSite=None的 cookies 可用,前提是它們是從安全連接訪問的。 Chrome 84 發行說明鏈接供參考: https://support.google.com/chrome/a/answer/7679408?hl=en Q.3 如何修復(或准備)它? Session 數據不是 PayU 集成的一部分,它由商家管理。 您可以參考下面的鏈接並進行必要的更改。下面的鏈接可供參考。 (參考https://web.dev/samesite-cookies-explained/

SameSite cookies 解釋了解如何使用 SameSite 屬性標記您的 cookies 以供第一方和第三方使用。 您可以通過使用 SameSite 的 Lax 和 Strict 值來增強站點的安全性來改進保護...web.dev

進行以下更改。

在config/cookie.php頁面設置

$安全=真; $samesite = '無';

在 config/security.php 設置

$samesite = '無';

然后給出絕對路徑作為重定向 url:例如:domain.com/customer/Pay/checkTransaction

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM