これはCakePHP1.3です
各ステップの後に新しいセッションデータを保存する5ステップの注文フォームがあります。これは、ユーザーが注文を完了する最後のステップまで、すべてのステップで完全に機能します。
最後のステップで、注文を保存し、セッションフラグを設定して完了したことを示します。このように、ユーザーがページを更新しても、別の注文を再度行うことはありません。
問題は、セッションにフラグを設定し、セッションをデバッグするとそこにあることです。ページの更新時に、セッションは新しい値なしで以前の状態に完全に戻りました。
// Controller action for step 5 of the form
public function step5() {
// FIRST DEBUG
debug($this->Session->read('order'));
// Load from session so that the view can display the order information
$this->data = $this->Session->read('order');
// Save order if not already completed
if (!$this->Session->check('order.complete')) {
// Adds to the database
if ($this->_saveOrder($this->data)) {
// Set flag so if the user refreshes, it won't save again
$this->Session->write('order.complete', true);
// SECOND DEBUG
debug($this->Session->read('order'));
}
}
}
ページが読み込まれるときの最初のデバッグでは、セッションは次のようになります。
Array
(
[Order] => Array
(
[value1] => 4566
[value2] => 'test'
[value3] => 0
[value4] => 0
)
[Customer] => Array
(
[fname] => test
[sname] => test
[email] => test@torg.co.uk
[tel] => 0123456789
)
)
次に、2番目のデバッグは、新しいセッションフラグがセッションに書き込まれたことを示します。
Array
(
[Order] => Array
(
[value1] => 4566
[value2] => 'test'
[value3] => 0
[value4] => 0
)
[Customer] => Array
(
[fname] => test
[sname] => test
[email] => test@torg.co.uk
[tel] => 0123456789
)
['complete'] => true
)
しかし、ページを更新すると、complete
フラグがなくなり、セッションは以前の状態に完全に戻り、フラグがないために保存が再度実行されます。フラグが書き込まれた後はコードがないため、フラグは削除されません。
Array
(
[Order] => Array
(
[value1] => 4566
[value2] => 'test'
[value3] => 0
[value4] => 0
)
[Customer] => Array
(
[fname] => test
[sname] => test
[email] => test@torg.co.uk
[tel] => 0123456789
)
)
セッションの書き込みは、他のすべてのステップで正常に機能します。ページ間でセッション変数を追加/更新できます。これらは正常に機能し、ページ間およびページの更新間で保持されます。
これが私の設定設定と関係があるのか、それとも何なのかわかりません。このページだけでなぜこれが起こっているのかわかりません。また、ごくまれに、AGESのために髪を引き裂き、キャッシュを数回クリアした後などに気づきました。一時的に機能するように見えた後、再び機能しなくなることがあります。
それは私の設定設定と関係がありますか?Config/core.php
これがコメントなしの私のです:
Configure::write('debug', 2);
Configure::write('log', true);
Configure::write('App.encoding', 'UTF-8');
Configure::write('App.baseUrl', 'components/com_cake/app');
//Configure::write('Routing.prefixes', array('admin'));
//Configure::write('Cache.disable', true);
//Configure::write('Cache.check', true);
define('LOG_ERROR', 2);
Configure::write('Session.save', 'php');
//Configure::write('Session.model', 'Session');
//Configure::write('Session.table', 'cake_sessions');
//Configure::write('Session.database', 'default');
Configure::write('Session.cookie', 'CAKEPHP');
Configure::write('Session.timeout', '120');
Configure::write('Session.start', true);
Configure::write('Session.checkAgent', true);
Configure::write('Security.level', 'medium');
Configure::write('Security.salt', 'd1a4bfb8a3cxxxxx47173663e9e2e9ea5');
Configure::write('Security.cipherSeed', '1269383xxxxxxxxxx3672219');
Configure::write('Asset.timestamp', 'force');
//Configure::write('Asset.filter.css', 'css.php');
//Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php');
Configure::write('Acl.classname', 'DbAcl');
Configure::write('Acl.database', 'default');
//date_default_timezone_set('UTC');
Cache::config('default', array('engine' => 'File'));