在 Codeigniter 4 中从 PayU 支付网关重定向重定向后,会话随机销毁



这个问题是在过去 2 天尝试了许多解决方案后发布的,但没有任何效果。我的Codeingiter 4项目中的会话以奇怪的方式运行。我的应用程序中有一个支付模块,PayU是我的支付网关提供商。支付网关重定向后,PayU 将在我的 URL 中发布一些响应数据。此时会话会自动销毁。我不知道为什么,为了你的理解,它正在发生,因为它不是每次都发生,比如说 10 个会话将在成功付款后销毁 7 次。我从控制器内的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
}

我的 htaccess 文件除了用于从 URL 隐藏公共的重写规则外,不包含任何其他内容。

这是我的 .env

app.sessionDriver = 'CodeIgniterSessionHandlersDatabaseHandler' // 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

我在我的基本控制器中尝试过这个

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 = ConfigServices::session();
session();
}

我在 php 中添加了这一行.ini

session.auto_start = 1

付款后,PayU将发布对此功能的响应 我使用的是PHP 7.4,Codeigniter 4.1.5和Litespeed 1.7.14。

更新

我将Codeingiter版本更新为4.2.3最新版本,但此问题无法治愈。

PayU给出的回答是,

TL;DR- 在 Chrome v.84 中,SameSite cookie 属性被释放,如果服务器未处理该属性,可能会导致导致会话数据丢失或会话 ID 变为空的问题。Chrome 浏览器 84+ 版本会出现 cookie 在返回旅程中变为空的问题。PayU 端对 cookie 没有任何限制。

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

会话在事务期间为空或被销毁是 由于PayU没有发生,但Chrome已经更新了一些缓存和 Cookie 政策在其最新更新 v84 中,必须实施相同的内容 在您的会话中。

PayU 没有在会话中扮演任何角色,如果您尝试相同的会话 Mozilla 它将在那里工作,您不会面临任何空会话 问题。

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

设置了与跨站点资源关联的 Cookie 没有SameSite属性。它已被阻止,因为现在的Chrome 仅通过跨站点请求传递 Cookie,如果它们设置为SameSite=NoneSecure.您可以在开发者中查看 Cookie 应用程序>存储>Cookie 下的工具,并在 和。

请在以下解决方案中找到此问题:

饼干在返回旅程中变为空的问题是 发生在Chrome浏览器84+版本。 没有限制 从PayU的结尾,饼干也是如此。解决方案建议:铬84 安全更新指出,cookie 的 SameSite 属性将是 默认情况下,宽松(允许用于GET请求),如果我们希望cookie 旅行,那么它应该被标记为相同网站:无和"安全" 明确地。 (参考 https://web.dev/samesite-cookies-explained/

• 同一网站饼干解释 了解如何标记您的饼干 具有"相同网站"属性的第一方和第三方用法。您可以 通过使用 SameSite 的宽松和严格值增强您网站的安全性 提高对 CSRF 攻击的防护。指定新的"无" 属性允许您明确标记跨站点的 Cookie 用法。web.dev

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

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

跨泛印度的事件引用 标头中缺少会话 ID 付款后的响应导致会话数据丢失。 一些商家 整个PayU都提出了对会话损失的担忧,当 交易在版本高于 v84.出现此问题的原因是 Cookie 政策从 铬。这些更改会阻止用户移动时保留 Cookie 跨多个域,从而导致会话丢失 对于用户。

交易影响高

受影响区域生产和UAT生产

事件处理的简短描述 Q.1 铬如何SameSiteCookie 政策会影响我的浏览器重定向集成?在 Chrome v.84 SameSite cookie 属性被释放,如果不处理 服务器可能会导致导致会话数据丢失或 会话 ID 为空。 商家可能会突然激增 订单结束时未完成 Q.2 关于 Chrome 的SameSiteCookie 政策 对于运行 Chrome v.84 及更高版本的用户,Chrome 会强制执行 默认安全 Cookie 分类系统处理 Cookie 尚未声明SameSite价值为SameSite=Lax饼干。只 设置为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 的宽松和严格值增强您网站的安全性 为了改善保护...web.dev

进行以下更改。

在配置/饼干.php页面集中

$secure = 真 ; $samesite = "无";

在"配置/安全性"中.php设置

$samesite = "无";

然后给出绝对路径作为重定向网址: 例如:domain.com/customer/Pay/checkTransaction

最新更新