【问题标题】:CakePHP doesn't set any cookies and session after changing server更改服务器后 CakePHP 不设置任何 cookie 和会话
【发布时间】: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


    【解决方案1】:

    确保您遵循以下步骤:

    //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');
    

    【讨论】:

    • 我自己不存储任何cookie,因此不需要这些步骤。要登录,我使用默认的 cakephp 身份验证系统。并且任何 cookie 都不是从 cakePHP 设置的。
    • 所以最好给我们一些代码,以便我们解决您的问题。
    • 我什至不知道我的问题何时出现在代码中,也不知道该放什么代码。但是没问题。我在似乎出现问题的地方添加了登录操作代码。
    【解决方案2】:

    检查您的控制器代码应在src/Controller/AppController.php 中了解以下几点

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

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

    3) 从 tmp 文件夹中删除模型和持久性的缓存文件夹

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

    【讨论】:

    • 我的 AppController 中没有任何额外的配置。是否需要初始化此组件才能使登录工作。正如我所说,它可以在其他服务器上完美运行,无需此配置。
    • 其他服务器意味着与其他域?
    • 你删除了模型和持久性的缓存以及tmp文件夹中的其他缓存文件吗?
    • 是的,我删除了缓存。是的,我更改了服务器和域。
    猜你喜欢
    • 2013-05-20
    • 2020-02-07
    • 1970-01-01
    • 2018-11-01
    • 2010-11-25
    • 1970-01-01
    • 2020-11-08
    • 2017-03-23
    • 2014-12-03
    相关资源
    最近更新 更多