Cakephp 正在编写会话,然后在页面刷新时丢失
这是CakePHP1.3 我有一个5步的订单,在每一步之后存储新的会话数据。在用户完成订单的最后一步之前,每一步都可以完美地完成 在最后一步中,我保存了顺序,然后设置了一个会话标志,表示它已经完成。这样,如果用户刷新页面,它将不会再次执行另一个订单 问题是,我在会话中设置了标志,如果我调试会话,它就在那里。在页面刷新时,会话已完全恢复到以前的状态,没有新值Cakephp 正在编写会话,然后在页面刷新时丢失,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,这是CakePHP1.3 我有一个5步的订单,在每一步之后存储新的会话数据。在用户完成订单的最后一步之前,每一步都可以完美地完成 在最后一步中,我保存了顺序,然后设置了一个会话标志,表示它已经完成。这样,如果用户刷新页面,它将不会再次执行另一个订单 问题是,我在会话中设置了标志,如果我调试会话,它就在那里。在页面刷新时,会话已完全恢复到以前的状态,没有新值 // Controller action for step 5 of the form public function step5() {
// 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
)
)
会话写作在所有其他步骤上都很有效。我可以在页面之间添加/更新会话变量,这些变量可以正常工作,并在页面和页面刷新中保持不变
我不知道这是否与我的配置设置有关。我不知道为什么就在这一页上。我也注意到,有时,非常罕见,在把我的头发撕了好长时间并清理了几次缓存之后,它似乎会短暂地工作一次,然后又停止工作
这可能与我的配置设置有关吗?下面是我的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'));
我花了很长时间才弄明白这一点,但问题实际上是我在Joomla框架内使用了CakePHP组件,我必须使用PHP的原生mysqli函数而不是Cake的数据库抽象层来选择一个不同的数据库 发生的事情是,我更改了所选的MySQL数据库,这导致了大量来自Joomla的微妙且似乎无法解释的问题,但这些问题只在Cake中明显可见
解决方案是确保在我的
AppController::beforeRender()
方法中切换回Joomla所需的数据库。我花了很长时间才弄明白,但问题实际上是我在Joomla框架内使用了一个CakePHP组件,我必须选择一个不同的数据库,使用PHP的原生mysqli函数,而不是Cake的数据库抽象层
发生的事情是,我更改了所选的MySQL数据库,这导致了大量来自Joomla的微妙且似乎无法解释的问题,但这些问题只在Cake中明显可见
解决方案是确保我在我的
AppController::beforeRender()
方法中切换回Joomla所需的数据库。你能发布$this->\u saveOrder
的代码吗?老实说,它相当史诗般,并且不包含任何与会话相关的内容。启动数据库事务,然后将表单数据保存到各种模型中,如果一切正常,则提交并返回true,否则回滚并返回false。问题在于顺序。完整的未正确保存,或者您无意中覆盖了它。如果将badger.complete
(或任何未使用的变量)与order.complete
一起设置,并且刷新后两个值不同,则会出现后一个问题。如果你的会话在许多其他情况下都能正常工作,那么前者似乎很奇怪。你能发布$this->\u saveOrder
的代码吗?老实说,它相当史诗般,并且不包含任何与会话有关的内容。启动数据库事务,然后将表单数据保存到各种模型中,如果一切正常,则提交并返回true,否则回滚并返回false。问题在于顺序。完整的未正确保存,或者您无意中覆盖了它。如果将badger.complete
(或任何未使用的变量)与order.complete
一起设置,并且刷新后两个值不同,则会出现后一个问题。如果您的会话在许多其他情况下都有效,那么前者似乎很奇怪。