从支付网关重定向后,CodeIgniter会话丢失



我使用CI版本3.1.13和PHP 7.4.33来开发我的web应用程序。我正在使用CyberSource支付网关进行在线支付,但是当用户从CyberSource重定向到webapp时,会话将丢失。

流程如下

用户登录=>Select Package =>输入信用卡详细信息(POST数据到CyberSource) =>从CyberSource POST数据重定向回来(现在用户登录会话是由于会话丢失,用户被重定向回登录页面)

我过去遇到过这个问题2次,但无法找到任何有希望的解决方案,必须应用自定义补丁来解决这个问题(将序列化的会话数组保存到临时数据库表中,如果会话丢失,则从临时表中检索会话数组)

下面是我到目前为止尝试过的没有正确分辨率的

  • https://stackoverflow.com/a/50792059/1835912Go to system/libraries/Session/session.php at Line no 281 and replace ini_set('session.name', $params['cookie_name']); by ini_set('session.id', $params['cookie_name']);这解决了在FireFox中而不是在Chrome
  • 的问题
  • https://stackoverflow.com/a/66354648/1835912You should use SameSite=None on your cookies attributes. Also if you use SameSite=None you should set the secure cookies attribute as well.
  • $config['cookie_secure'] = FALSE; // if is not under https, or true if you use https
  • $config['cookie_path'] = '/;SameSite=None';$config['cookie_secure'] = TRUE;
  • 尝试将PHP版本更改为7.1,7.2,7.3和8.1(所有这些版本都有相同的问题)
  • 我的web应用程序运行在安全协议HTTPS和网络源返回URL也有HTTPS
  • 遵循这一步一步youtube视频:https://www.youtube.com/watch?v=j6jBxlrhTY4

有人知道这个问题的正确解决方案吗,提前感谢!

我99%确定问题是!

$config['cookie_secure'] =true; // must be true for samesite=none to work, can't have it off.

如果这不能解决它,你有更多的问题,剩下的问题是你的会话域。也许重定向到www或无www版本,cookie默认设置在子域级别,会话依赖于cookie。如果我是对的,你可以这样做:

  1. 将重定向问题修复为相同的域和协议[推荐]
  2. 设置会话域范围为以点为首的根域。".domain.com">

这是假设你的其他设置是正确的,我将从放松调试的限制开始:

  1. Samesite =没有

  2. 饼干。Secure=True (SameSite=none要求Secure为1 !)

  3. 一切都应该在HTTPS上,似乎你的尝试没有,支付网关应该给你一个错误,它不是。他们违反了聚合酶链反应法规。即使你没有实现导致这种风险,他们也不会,特别是如果他们有任何经常性支付/用户管理/CRM等…

https://stackoverflow.com/a/66354648/6934036可能有帮助。
在我的情况下,它与PHP版本或上述解决方案无关。
cookies是通过Set-Cookie头设置的,当用户从支付网关重定向到我的网站时,没有Set-Cookie,所以我不能认证用户或访问任何其他cookie,我不得不允许未经认证的用户访问支付结果页面。

我所做的是向用户显示包含访问付款详细页面的链接的付款结果页面,在用户从付款结果页面重定向到付款详细页面后(带有链接或自动),我可以访问cookie并授权用户。

最新更新