【发布时间】:2016-09-01 17:58:16
【问题描述】:
我有一个基于 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 Token cookie is missing。为了测试组件是否是问题,我禁用了 csrf 并重试,然后出现白屏,如果我刷新页面我没有登录,什么也不会发生。我检查了工作版本和非工作版本,并意识到 Cake 没有存储任何 cookie新服务器,而在旧服务器上一切正常,并且设置了 cookie。
经过几次研究,我发现不仅 cookie 不起作用,而且所有会话都不起作用。我尝试转储 $_SEESION,但它仅在调用 $this->Auth->setUser($user) 后才显示某些内容,而在其他任何地方都没有。于是我浏览了一些解决方案,发现 config/app.php 中有一个设置来设置会话:
'Session' => [
'defaults' => 'php',
],
当以这种方式设置时,会话存储在默认的 php 目录中。所以我把它改成了 cake(甚至在 tmp 文件夹中创建了一个 dir 会话并添加了 777 权限)。但问题并没有解决。我不知道为什么它不起作用。我尝试在 Session config 中设置 cookiePath 和其他设置,但还是不行。
我认为这可能是服务器问题(权限)。关于服务器的几句话:一切正常的旧服务器是我的私人服务器(我有完全访问权限),新服务器(或者可能是虚拟服务器/主机)在我几乎没有特权的托管公司之一(home.pl)上配置。
【问题讨论】:
标签: php session cakephp cookies