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 选项。

另见