Zend Framework 1 アプリケーションの問題に取り組むのに苦労しています。これは、チェックアウト ページからクライアントが支払いゲートウェイ プロバイダーにリダイレクトされるカスタム Web ショップ アプリケーションです。したがって、次のようになります。
クライアントがチェックアウト ページで支払い方法を選択すると、バックグラウンドでトランザクション ハンドシェイクがアプリケーションと支払いプロバイダーの間で行われます。
次に、支払いプロバイダーから、クライアントがリダイレクトされる支払い URL が返されます。
クライアントが支払いを行うと、支払いプロバイダーはクライアントをウェブショップにリダイレクトして成功 URL に戻します。
ほとんどの場合、これで問題なく動作しますが、成功ページにリダイレクトされた後、クライアントが新しいセッション ID を取得する場合があります。その時点でセッション データが注文を完了するために使用されているため、これは問題です。
ローカルでは、おそらく 50 回の試行のうち、この問題を再現できたのは 1 回だけです。したがって、「シナリオが機能することもあれば、機能しないこともある」というシナリオの1つ、つまり*デバッグと修正が面倒です。
application.ini のセッション設定と Bootstrap の _initSession をいじってみましたが、実際には、これらの変更の後、問題を再現することができました (その 1 回)。
元の application.ini と Bootstrap.php (関連する部分のみ) は次のようになります。
アプリケーション.ini:
resources.session.save_path = APPLICATION_PATH "/../data/sessions"
resources.session.gc_maxlifetime = 2592000
resources.session.remember_me_seconds = 2592000
Bootstrap.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(...); を呼び出す必要がありますか? Bootstrap の 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