CakePHP 3.0 Configure::write()不保留从一篇文章到下一篇文章的键/值?

CakePHP 3.0 Configure::write()不保留从一篇文章到下一篇文章的键/值?,php,session,cakephp,cakephp-3.0,Php,Session,Cakephp,Cakephp 3.0,每次处理post时,代码都会通过我自己的MyController扩展AppController类中的函数运行。该函数调用该函数以获取唯一的上下文编号。这个想法是,这个数字应该从一个post保留到下一个post(或者从一个控制器类函数运行到下一个)。但是,Configure::check()总是失败,并且unique32总是重新创建,因此此函数总是返回1 有人知道如何让Configure::write()从一篇文章保留到下一篇文章吗 public function getUnique32() {

每次处理post时,代码都会通过我自己的
MyController扩展AppController
类中的函数运行。该函数调用该函数以获取唯一的上下文编号。这个想法是,这个数字应该从一个post保留到下一个post(或者从一个控制器类函数运行到下一个)。但是,
Configure::check()
总是失败,并且unique32总是重新创建,因此此函数总是返回1

有人知道如何让
Configure::write()
从一篇文章保留到下一篇文章吗

public function getUnique32() {
    if (!Configure::check('unique32')) {
        $unique32 = 0;
        echo "unique32 starts at 0";
    } else {
        $unique32 = Configure::read('unique32');
        echo "unique32 is $unique32";
    }
    if (++$unique32 >= 0xffffffff) {
        $unique32 = 0;
        echo "unique32 is reset to 0";
    }
    Configure::write('unique32', $unique32);
    return $unique32;
}

Class
Configure
不会在页面请求之间保留数据。改用class
会话

在CakePHP 3.x中,您的代码应编写如下:

public function getUnique32() {

    $session = $this->request->session();
    if (!$session->check('unique32')) {
        $unique32 = 0;
        echo "unique32 starts at 0";
    } else {
        $unique32 = $session->read('unique32');
        echo "unique32 is $unique32";
    }

    if (++$unique32 >= 0xffffffff) {
        $unique32 = 0;
        echo "unique32 is reset to 0";
    }

    $session->write('unique32', $unique32);
    return $unique32;
}
对于CakePHP2.x,您可以在代码中用一个类替换另一个类

从Cookbook 3.x中:


知道这件事是件好事。我可以问一下这个疗程持续多长时间吗?在出现“服务httpd重启”之前,我一直在寻找。顺便说一句,这似乎是CakePHP文档中的一个严重遗漏,除非您知道引号在哪里。会话持续指定的时间。看见会话在服务httpd重新启动后仍然有效,因为它们基于cookies和sess_uuuxxxxxx文件,只有在它们过期时才会被清除。好的,我想跨重新启动也可以。最后一个问题。简单地用一个类替换另一个类是行不通的。我是否需要一个“使用”语句和/或“需要一次”语句?或者我需要初始化会话吗?你确定它不应该是“CakeSession”而不是“Session”吗?我刚刚意识到你使用的是CakePHP 3.x。将编辑我的答案。