Cakephp 正在编写会话,然后在页面刷新时丢失

Cakephp 正在编写会话,然后在页面刷新时丢失,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,这是CakePHP1.3 我有一个5步的订单,在每一步之后存储新的会话数据。在用户完成订单的最后一步之前,每一步都可以完美地完成 在最后一步中,我保存了顺序,然后设置了一个会话标志,表示它已经完成。这样,如果用户刷新页面,它将不会再次执行另一个订单 问题是,我在会话中设置了标志,如果我调试会话,它就在那里。在页面刷新时,会话已完全恢复到以前的状态,没有新值 // Controller action for step 5 of the form public function step5() {

这是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
        )

)
然后,第二次调试显示新会话标志已写入会话:

 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
一起设置,并且刷新后两个值不同,则会出现后一个问题。如果您的会话在许多其他情况下都有效,那么前者似乎很奇怪。