這是CakePHP的1.3CakePHP的 - 會話被寫入,然後失去了頁面刷新
我有每個步驟後存儲新的會話的數據的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] => [email protected]
[tel] =>
)
)
然後第二調試表明,新的會話標誌已經被寫入了會議:
Array
(
[Order] => Array
(
[value1] => 4566
[value2] => 'test'
[value3] => 0
[value4] => 0
)
[Customer] => Array
(
[fname] => test
[sname] => test
[email] => [email protected]
[tel] =>
)
['complete'] => true
)
但是,如果我刷新頁面,complete
標誌消失,會話已完全恢復到以前的狀態,並且由於標誌不存在,保存會再次運行。標誌寫入後沒有代碼,因此不會被刪除。
Array
(
[Order] => Array
(
[value1] => 4566
[value2] => 'test'
[value3] => 0
[value4] => 0
)
[Customer] => Array
(
[fname] => test
[sname] => test
[email] => [email protected]
[tel] =>
)
)
會話寫入在所有其他步驟中工作正常。我可以在頁面之間添加/更新會話變量,並且它們可以很好地工作並在頁面和頁面刷新中保持不變。
我不知道這是否與我的配置設置或什麼有關。我不知道爲什麼會發生在這個頁面上。有時候,我也很少注意到,在將我的頭髮拉出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'));
你可以發佈'$ this - > _ saveOrder'的代碼嗎? – Hoff
說實話,這是非常史詩般的,並且不包含與會話有關的任何事情。數據庫事務啓動後,它將表單數據保存到各種模型中,然後如果一切順利,它將提交併返回true,否則它將回滾並返回false。 – BadHorsie
問題是'order.complete'沒有被正確保存,或者你意外覆蓋它。如果您在'order.complete'旁邊設置了'badger.complete'(或任何未使用的變量),並且這兩個值在刷新後不同,則會出現後一個問題。如果您的會議在許多其他情況下工作,前者似乎很奇怪。 –