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,提供了更多详细信息。