【问题标题】:Session destroy randomly after redirection from PayU payment gateway redirection in Codeigniter 4在 Codeigniter 4 中从 PayU 支付网关重定向重定向后,会话随机销毁
【发布时间】:2022-08-20 01:06:45
【问题描述】:

这个问题是在过去 2 天尝试了许多解决方案后发布的,但没有任何效果。我的 Codeingiter 4 项目中的会话以一种奇怪的方式表现。我的应用程序中有一个支付模块,PayU 是我的支付网关提供商。支付网关重定向后,PayU 将在我的 URL 中发布一些响应数据。此时会话自动销毁。我不知道为什么,为了您的理解,它正在发生,因为它不是每次都发生,说成功付款后 10 个会话将销毁 7 次。我从控制器内的 PayU 获得所有响应。如果付款因使用而取消,则频率约为 10 次尝试中的 5 次。此问题仅在从 PayU 支付网关重定向后发生,无论支付状态如何。我尝试了this,this,this,this 以及 StackOverflow 以外的许多其他站点。

我在 AlmaLinux 8 中使用 Open LiteSpeed 服务器。我在我的虚拟服务器配置文件中添加了这个

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

我的 htaccess 文件不包含除用于隐藏的重写规则之外的任何内容上市从网址。

这是我的 .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将回复this function 我正在使用 PHP 7.4、Codeigniter 4.1.5 和 Litespeed 1.7.14。

更新

我将 Codeigniter 版本更新为 4.2.3 最新版本,但无法解决此问题。

  • 您喜欢使用 cookie 进行自动登录吗?如果你这样做,那么你应该这样做。
  • 我对这个问题感到筋疲力尽。我正在使用 codeigniter 3 并检查了 PHP 7.2、8.0 和 8.1 都存在这个问题。我观察到的一个特殊问题是,只有在使用来自 3rd 方域的 POST 数据进行重定向时,会话才会被破坏。否则没问题。

标签: php codeigniter session codeigniter-4


【解决方案1】:

PayU给出的答复是,

TL;博士- 在 Chrome v.84 中,SameSite cookie 属性已发布,如果服务器不处理该属性,可能会导致会话数据丢失或会话 ID 为 NULL 的问题。chrome 浏览器 84 中出现 cookie 在回程中为 NULL 的问题+ 版本。PayU 端对 cookie 没有限制。

解决方案建议:chrome 84 安全更新表明 cookie 的 SameSite 属性默认为 Lax(允许 GET 请求),如果我们希望 cookie 传输,则应明确标记 SameSite : None 和“Secure”。 (参考https://web.dev/samesite-cookies-explained/

会话在事务期间为空或被破坏是 由于 PayU 而没有发生,但 Chrome 更新了一些缓存和 上次更新 v84 中的 cookie 政策,同样必须实施 在您的会话中。

PayU 在会话中没有任何作用,如果您尝试相同 Mozilla 它会在那里工作,你不会遇到任何空会话 问题。

请在 Chrome 论坛上找到以下可用点进行复制 这个问题。

设置了与跨站点资源关联的 cookie 没有SameSite 属性。它已被阻止,就像现在的 Chrome 仅在设置为带有跨站点请求时才提供 cookie SameSite=NoneSecure。您可以在开发人员中查看 cookie 应用程序>存储>Cookies下的工具,并在以下位置查看更多详细信息 和 。

请在下面找到此问题的解决方案:

cookie 在回程中为 NULL 的问题是 发生在 chrome 浏览器 84+ 版本中。没有限制 从 PayU 的角度来看 cookie 。解决方案建议:chrome 84 安全更新说 cookie 的 SameSite 属性将是 Lax(允许 GET 请求)默认情况下,如果我们想要 cookie travel 那么它应该被标记为 SameSite : None 和 "Secure" 明确地。 (参考https://web.dev/samesite-cookies-explained/

• SameSite cookie 说明 了解如何将 cookie 标记为 具有 SameSite 属性的第一方和第三方使用。你可以 使用 SameSite 的 Lax 和 Strict 值增强站点的安全性 以提高对 CSRF 攻击的保护。指定新的无 属性允许您为跨站点显式标记 cookie 用法。网络开发

如果在您进行更改后,请与您的技术团队核实, 在返回商家网站的过程中,会话 ID 为 NULL。如果会话 id 为 Null ,请在 RCA 下方找到有关 chrome 浏览器 84 的问题 版本。

这是为了通知您 Chrome 在 最新更新 v.84 及其对事务处理的影响。下面是 细节相同。

标题中缺少泛印度会话 ID 的事件参考 响应后付款导致会话数据丢失。一些商家 整个 PayU 都提出了会话丢失的担忧,当 交易在版本高于的 Chrome 浏览器上处理 v84。此问题是由于 Cookie 政策从 铬合金。当用户移动时,这些更改会阻止 cookie 保留 跨多个域,从而导致会话丢失 为用户。

交易影响高

受影响地区的生产和 UAT

事件处理的简短描述 Q.1 Chrome 如何 SameSite Cookie 策略影响我的浏览器重定向集成?在 Chrome v.84 SameSite cookie 属性已发布,如果未处理 由服务器可能导致导致会话数据丢失的问题或 会话 ID 为 NULL。商户可能会突然激增 未完成的订单 Q.2 关于 Chrome 的 SameSite Cookie 政策 对于运行 Chrome v.84 及更高版本的用户,Chrome 强制执行 默认安全的 cookie 分类系统,用于处理以下 cookie 尚未将 SameSite 值声明为 SameSite=Lax cookie。仅有的 设置为 SameSite=None 的 cookie 将可用,前提是它们 从安全连接访问。 Chrome 84 发行说明链接 供参考:https://support.google.com/chrome/a/answer/7679408?hl=en Q.3 如何修复(或准备)它?会话数据不属于 PayU 集成,由商家管理。你可以参考 下面的链接并进行必要的更改。下面的链接可用于 参考。 (参考https://web.dev/samesite-cookies-explained/)

SameSite cookie 解释了解如何标记您的 cookie 具有 SameSite 属性的第一方和第三方使用。你可以 使用 SameSite 的 Lax 和 Strict 值增强站点的安全性 改善保护...web.dev

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2018-12-05
    • 2020-07-14
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多