cakePHP 4 如何改变 session.cookie_lifetime
cakePHP 4 how to change session.cookie_lifetime
我有时间以秒为单位结束会话。如果用户没有选中复选框“remember_me” - 会话将持续 2 小时。当复选框被选中时 - 应该持续 - 48 小时。我有一个 loginСontroller,我在其中对登录结果做出反应,如果验证成功并且复选框 =“on”,则您需要更改会话时间。我试图通过查看文档进行更改,并花了很多时间寻找解决方案。也许有人可以帮助我。提前非常感谢[在此处输入图片描述]
这是我的文件 config/app.php
'Session' => [
'defaults' => 'php',
'ini' => [
'session.cookie_lifetime' => 7200,
]
],
这是我的登录控制器
`public function index()
{
$this->viewBuilder()->setLayout('main');
$this->set("title", "");
$this->set("description", "description");
$this->request->allowMethod(['get', 'post']);
$result = $this->Authentication->getResult();
// regardless of POST or GET, redirect if user is logged in
if ($result->isValid()) {
if ($this->request->getData('remember') == 'on') {
///// the solution should be here
}
$redirect = [
'controller' => 'Main',
'action' => 'index',
];
return $this->redirect($redirect);
}
// display error if user submitted and authentication failed
if ($this->request->is('post') && !$result->isValid()) {
$this->Flash->saved_error(__('Invalid email or password'));
}
}`
你很可能不应该那样做,如果可以避免的话,你的控制器代码不应该知道这些细节。
身份验证插件附带一个基于 cookie 的身份验证器,您可以在会话身份验证器之外使用它,这样您就可以将身份验证延长到默认会话生命周期之外,我建议您改为研究一下。
$service->loadAuthenticator('Authentication.Cookie', [
'fields' => $fields,
'loginUrl' => $loginUrl,
'cookie' => [
// cookie expires in 2 days from now
'expires' => \Cake\Chronos\Chronos::now()->addDays(2)
],
]);
默认情况下,身份验证器会查找名为 remember_me
的字段,因此请在您的模板中重命名该字段,例如:
echo $this->Form->control('remember_me', ['type' => 'checkbox']);
或者使用您在表单中使用的自定义字段名称配置身份验证器的 rememberMeField
选项。
另见
我有时间以秒为单位结束会话。如果用户没有选中复选框“remember_me” - 会话将持续 2 小时。当复选框被选中时 - 应该持续 - 48 小时。我有一个 loginСontroller,我在其中对登录结果做出反应,如果验证成功并且复选框 =“on”,则您需要更改会话时间。我试图通过查看文档进行更改,并花了很多时间寻找解决方案。也许有人可以帮助我。提前非常感谢[在此处输入图片描述]
这是我的文件 config/app.php
'Session' => [
'defaults' => 'php',
'ini' => [
'session.cookie_lifetime' => 7200,
]
],
这是我的登录控制器
`public function index()
{
$this->viewBuilder()->setLayout('main');
$this->set("title", "");
$this->set("description", "description");
$this->request->allowMethod(['get', 'post']);
$result = $this->Authentication->getResult();
// regardless of POST or GET, redirect if user is logged in
if ($result->isValid()) {
if ($this->request->getData('remember') == 'on') {
///// the solution should be here
}
$redirect = [
'controller' => 'Main',
'action' => 'index',
];
return $this->redirect($redirect);
}
// display error if user submitted and authentication failed
if ($this->request->is('post') && !$result->isValid()) {
$this->Flash->saved_error(__('Invalid email or password'));
}
}`
你很可能不应该那样做,如果可以避免的话,你的控制器代码不应该知道这些细节。
身份验证插件附带一个基于 cookie 的身份验证器,您可以在会话身份验证器之外使用它,这样您就可以将身份验证延长到默认会话生命周期之外,我建议您改为研究一下。
$service->loadAuthenticator('Authentication.Cookie', [
'fields' => $fields,
'loginUrl' => $loginUrl,
'cookie' => [
// cookie expires in 2 days from now
'expires' => \Cake\Chronos\Chronos::now()->addDays(2)
],
]);
默认情况下,身份验证器会查找名为 remember_me
的字段,因此请在您的模板中重命名该字段,例如:
echo $this->Form->control('remember_me', ['type' => 'checkbox']);
或者使用您在表单中使用的自定义字段名称配置身份验证器的 rememberMeField
选项。
另见