我很难解决 Zend Framework 1 应用程序的问题。这是一个自定义的网上商店应用程序,客户端从结帐页面被重定向到支付网关提供商。所以它看起来像这样:
当客户在后台在我们的结帐页面上选择一种付款方式时,我的应用程序和支付提供商之间正在进行交易握手。
然后,支付提供商将客户重定向到的支付 URL 发回给我。
客户付款,付款提供商将客户重定向回我们的网上商店,并获得成功的 url。
在大多数情况下,这工作得很好,但在某些情况下,客户端在被重定向到我们的成功页面后会获得一个新的会话 ID。这是一个问题,因为此时正在使用会话数据来完成订单。
在本地,我只能在大约 50 次尝试中重现这个问题。因此,它是“有时有效,有时无效”的情况之一,或者换句话说,是调试和修复的痛苦之一。
我尝试使用我的 application.ini 中的会话设置以及我的 Bootstrap 中的 _initSession,但实际上在进行了这些更改之后,我设法重现了该问题(那一次)。
原始的 application.ini 和 Bootstrap.php(仅相关部分)如下所示:
应用程序.ini:
resources.session.save_path = APPLICATION_PATH "/../data/sessions"
resources.session.gc_maxlifetime = 2592000
resources.session.remember_me_seconds = 2592000
引导程序.php:
protected function _initSession()
{
// set up the session as per the config.
$options = $this->getOptions();
$sessionOptions = $options['resources']['session'];
Zend_Session::setOptions($sessionOptions);
Zend_Session::start();
}
请注意,在所有其他情况/用例中,会话在整个站点中都可以正常工作。只有在重定向之后,某些客户端才会出错。我让应用程序记录了额外的信息,并且在这些情况下我实际上可以看到会话 ID 的变化。
这可能与较长的会话生命周期(1 个月)有关吗?还是我必须调用 Zend_Session::rememberMe(...); 在引导程序中的 Zend_Session::start() 之后?或任何其他想法、提示和建议?
编辑:我尝试过的其他会话选项如下:
resources.session.name = myuniquesessionname
resources.session.use_cookies = on
resources.session.use_only_cookies = on
resources.session.save_path = APPLICATION_PATH "/../data/sessions"
resources.session.gc_maxlifetime = 2592000
resources.session.remember_me_seconds = 2592000
resources.session.strict = on