首页 > 解决方案 > Yii2 从不注销空闲或离开用户

问题描述

如果 Yii 中的用户关闭浏览器或闲置大约一天(可能更少,我不确定),他们似乎会自动注销。是否有可能永远不注销它们(或者至少一个月或一年的很长一段时间)。不确定是否需要更改 Session 参数或 Cookie 参数。

我试过改变参数。

'components' => [
    'session'=>[
        'class' => 'yii\web\Session',
        'cookieParams' => ['httponly' => true, 'lifetime' => 3600 * 4* 365],
        'timeout' => 3600*4 *365,
        'useCookies' => true
    ],
]

我试过会话 php ini 参数:

session_set_cookie_params(0);
ini_set('session.gc_maxlifetime', 0);

我试过设置登录参数

 Yii::$app->user->login($user, 31536000);

标签: sessioncookiesyii2

解决方案


您使用的选项应该可以在没有timeoutuseCookies选项的情况下使用,我在上一个项目中使用它,会话需要至少持续一周,在 Mozilla 开发栏中打开存储选项卡并单击左侧的 cookie,您将看到 cookie 部分使用为您的网站注册的 cookie,在我的情况下是http://www.kp2.local

在此处输入图像描述

如果您使用它,它应该在1 周后'lifetime' => 7 * 24 * 60 * 60,显示具有到期日期的 cookie,即如下所示Wed, 23 Jan 2019

在此处输入图像描述

如果您注释掉代码然后注销,然后再次登录,它应该会显示到期Session时间

在此处输入图像描述

您只需要在配置中使用以下设置

'session' => [
    // this is the name of the session cookie used for login on the frontend
    'name' => 'advanced-frontend',
    'cookieParams' => [
        'httpOnly' => true,
        'lifetime' => 7 * 24 * 60 * 60
    ],
],

如果仍然无法正常工作,请退出系统并尝试通过选择Delete all下图所示的选项来删除所有 cookie。

https://i.imgur.com/49GkznS.png?2

它会起作用。

注意:您应该将7in更改'lifetime' => 7 * 24 * 60 * 60,为要保留会话的天数


推荐阅读