CakePHP3中的会话变量

CakePHP3中的会话变量,php,session,cakephp,cakephp-3.0,Php,Session,Cakephp,Cakephp 3.0,当用户访问我的网站/应用程序时,我需要存储一些重要信息(分支机构ID)。 此信息应在每个控制器中可用。我所做的是: AppController.php Configure::write('branch',$id); $branchId = Configure::read('branch'); FooController.php Configure::write('branch',$id); $branchId = Configure::read('branch'); 我不确定这是不是正

当用户访问我的网站/应用程序时,我需要存储一些重要信息(分支机构ID)。 此信息应在每个控制器中可用。我所做的是:

AppController.php

Configure::write('branch',$id);
$branchId = Configure::read('branch');
FooController.php

Configure::write('branch',$id);
$branchId = Configure::read('branch');

我不确定这是不是正确的方法。这是一个会话变量还是一个配置?其他用户是否可以覆盖此变量

我在书中读到的是,我可以使用:

Configure::write('Session', [
    'defaults' => 'php'
]);
然后读取任何控制器中的变量:

$this->request->session()->read('branch');
但我在哪里可以设置“分支”?这在AppController中是否可行?

您可以访问请求对象的任何地方

换句话说,把你的分支设置在你想要的地方(或者对你来说容易的地方)。 例如,我认为你最好这样做:

在你的
App.php中
初始化你的“分支”值,如下所示

Configure::write('branch',$id);
if(!$this->request->session()->read('branch')){
    $this->request->session()->write('branch', Configure::read('branch'));
}
AppController
中,在
beforeFilter
函数内检查会话是否存在,否则,使用如下配置值

Configure::write('branch',$id);
if(!$this->request->session()->read('branch')){
    $this->request->session()->write('branch', Configure::read('branch'));
}
在您的
fooController
中,只需使用
$this->request->session()->read('branch')
$this->request->session()->write('branch','value')

但您也可以在视图或单元格内读写会话


希望有帮助。

谢谢。但是缺少了一些东西。我无法在AppController中使用$this->Session,即使使用“use Cake\Network\Session;”:(明白了!我在AppController中使用了request->session():$this->request->session()>read('branch');