这是CakePHP 1.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
)
)
然后第二次调试显示新会话标志已写入会话:
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'));
答案 0 :(得分:1)
这让我永远想知道,但问题实际上是我在Joomla框架中使用了CakePHP组件,我不得不使用PHP的本机mysqli函数而不是Cake的数据库抽象层来选择不同的数据库。 / p>
我发生了什么改变了所选择的MySQL数据库,这引起了Joomla带来的一些微妙的,看似无法解释的问题,但这些问题只在Cake中出现过。
解决方案是确保我使用AppController::beforeRender()
方法切换回Joomla所需的数据库。