CakePHP在更改服务器后不设置任何cookie和会话


CakePHP doesn't set any cookies and session after changing server

我有一个基于CakePHP版本3.2.10的应用程序。我是全新的CakePHP所以抱歉,如果它是一个平庸的问题。在我的应用程序中,我使用这样配置的CSRF组件和Auth组件:

$this->loadComponent('Auth', [
            'authorize'=> 'Controller',
            'authenticate' => [
                    'Form' => [
                            'fields' => [
                                    'username' => 'email',
                                    'password' => 'password'
                            ],
                            'scope' => [
                                    'Users.active' => 1,
                            ]
                    ]
            ],
            'loginAction' => [
                    'controller' => 'Users',
                    'action' => 'login'
            ],
            'logoutAction' => [
                    'controller' => 'Users',
                    'action' => 'logout'
            ],
            'logoutRedirect' => [
                    'controller' => 'Pages',
                    'action' => 'index'
            ],
            'unauthorizedRedirect' => '/', // $this->referer()
    ]);

和像

这样的登录操作
public function login()
{
    $this->set('title', 'Logowanie');
    $this->set('bodyclass', 'main-page');
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            if($user['blocked'] == 0) {
                $this->Auth->setUser($user);
                if ($this->Auth->user('role') == 'admin')
                    return $this->redirect(['controller' => 'Admin', 'action' => 'index']);
                return $this->redirect($this->Auth->redirectUrl());
            }
            else{
                $this->Flash->error('Konto zostało zablokowane przez administratora serwisu. Skontaktuj się z Biurem Obsługi.');
            }
        } else $this->Flash->error('Błędne dane logowania. Spróbuj ponownie.');
    }
}

现在的问题是:

几天前,我改变了服务器上的应用程序正在运行,改变后,登录停止工作。单击登录后,有一条消息CSRF令牌cookie丢失。为了测试组件是否有问题,我禁用了csrf,然后再试一次,然后出现白屏,如果我刷新页面,我没有登录,什么也不会发生。我检查了工作版本和不工作版本,意识到蛋糕没有在新服务器上存储任何cookie,而在旧服务器上一切正常,并设置了cookie。

经过几次研究,我发现不仅饼干不工作,但所有的会话。我试图转储$_SEESION,但它显示的东西只有在调用$this->Auth->setUser($user)之后,没有其他地方。所以我查看了一些解决方案,发现在config/app.php中有一个设置来设置会话:

'Session' => [
    'defaults' => 'php',
],

当以这种方式设置时,读取会话存储在默认的php目录中。所以我把它改为蛋糕(甚至在tmp文件夹下创建一个目录会话,并添加了777权限)。但问题并没有解决。我不知道为什么不行。我尝试在会话配置中设置cookiePath和其他设置,但它仍然不工作。

我认为这可能是服务器问题(权限)。所以关于服务器的几句话:旧服务器,一切都是我的私人服务器(我有完全的访问权限),新服务器(或虚拟服务器/主机)是在一个托管公司(home.pl),我几乎没有特权来配置。

请确保遵循以下步骤:

//For Set
var $var = array('Cookie');
//For Write
$this->Cookie->write('YOUR DESIRED NAME', cookieData, $expires = null);
//For Read
$this->Cookie->read('YOUR DESIRED NAME');

检查你的控制器代码应该在src/Controller/AppController.php

1)您是否在initialize()beforeFilter()方法中正确加载cookie组件?

2)您是否使用$this->Cookie->configKey()在cookie配置中配置了域和路径,如果是,则将域更改为新域或删除域配置。

3)从TMP目录 中删除模型和持久性缓存文件夹

有关Cookie的更多信息,请参阅文档