Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP 3使用CakePHP 2中的会话cookie进行登录_Php_Session_Cakephp_Cookies - Fatal编程技术网

CakePHP 3使用CakePHP 2中的会话cookie进行登录

CakePHP 3使用CakePHP 2中的会话cookie进行登录,php,session,cakephp,cookies,Php,Session,Cakephp,Cookies,我想知道这是怎么做到的。我有两个应用程序,比方说: example.com(CakePHP 2) app.example.com(CakePHP 3) 用户需要通过example.com登录,然后自动登录到app.example.com。我当前的解决方案是将前一个应用程序上的会话cookie配置为使用通配符域,使其可用于后一个应用程序。从那以后,我想我应该能够以某种方式将第一个应用程序的cookie(以及设置等)的值“复制”到第二个应用程序的cookie 但是,我似乎无法使用$this->c

我想知道这是怎么做到的。我有两个应用程序,比方说:

  • example.com(CakePHP 2)
  • app.example.com(CakePHP 3)
用户需要通过
example.com
登录,然后自动登录到
app.example.com
。我当前的解决方案是将前一个应用程序上的会话cookie配置为使用通配符域,使其可用于后一个应用程序。从那以后,我想我应该能够以某种方式将第一个应用程序的cookie(以及设置等)的值“复制”到第二个应用程序的cookie

但是,我似乎无法使用
$this->cookie->read()
函数从
app.example.com
读取
example.com
的cookie

这是来自2个站点的cookies的屏幕截图。我试图使
BravierApp
cookie具有这样的值,即允许AuthComponent给用户一个“通行证”(过期日期与
Bravier
cookie相同)

任何帮助都将不胜感激

编辑

分别针对CakePHP2和CakePHP3的会话Cookie配置

// CakePHP 2
Configure::write('Session', array(
    'defaults' => 'php',
    'cookie' => 'Bravier',
    'timeout' => 60,
    'cookieTimeout' => 60,
    'checkAgent' => false,
    'ini' => [
        'session.cookie_domain' => '.' . $_SERVER['SERVER_NAME'],
        'session.cookie_httponly' => true,
        'session.cookie_secure' => false
    ]
));

// CakePHP3
'Session' => [
    'defaults' => 'php',
    'cookie' => 'BravierApp',
    'timeout' => 60,
    'cookieTimeout' => 60,
    'checkAgent' => false,
    'ini' => [
        'session.cookie_domain' => str_replace('app', '', $_SERVER['SERVER_NAME']),
        'session.cookie_httponly' => true,
        'session.cookie_secure' => false
    ]
]
在CakePHP2应用程序中,AuthComponent正在记录用户登录会话(默认情况下,我不会在那里更改任何内容)。但是,我会在保存会话之前更新设置,以更改cookieTimeout值

 Configure::write('Session', array_replace_recursive(Configure::read('Session'), [
                    'cookieTimeout' => $cookieExpiryMins,
                    'timeout' => $cookieExpiryMins,
                    'ini' => [
                        'session.cookie_lifetime' => ($cookieExpiryMins * 60),
                        'session.gc_maxlifetime' => ($cookieExpiryMins * 60),
                    ]
                ]));

                $this->Session->destroy();

                $this->Auth->login([
                     'id' => $user['User']['id']
                ]);

现在我只是想知道如何让用户自动登录CakePHP3应用程序,并在CakePHP2应用程序中设置到期日期。

首先,不要尝试通过cookie组件读取会话cookie,而是从请求对象读取它们(
$this->request->cookie('Bravier')
)。也就是说,不需要手动修改会话cookie,CakePHP 3应用程序应该能够拾取
Bravier
会话,只要配置正确。也就是说,您需要提供更多详细信息,以便有人能够进一步帮助您,例如,cookie是否首先发送?配置(会话和身份验证)是什么样子?等等。感谢@ndm,提供了更多详细信息。首先,不要尝试通过cookie组件读取会话cookie,改为从请求对象读取它们(
$this->request->cookie('Bravier')
)。也就是说,不需要手动修改会话cookie,CakePHP 3应用程序应该能够拾取
Bravier
会话,只要配置正确。也就是说,您需要提供更多详细信息,以便有人能够进一步帮助您,例如,首先发送的是cookie吗?配置(会话和身份验证)是什么样子的?等等…谢谢@ndm,提供了更多详细信息。