Yii2从不注销空闲或离开用户

时间:2019-01-16 05:02:40

标签: session cookies yii2

如果Yii中的用户关闭浏览器或闲置了大约一天(可能不确定,我不确定)会自动注销。是否有可能永远都不会注销它们(或者至少长时间注销一个月或一年)。不确定是否需要更改会话参数或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);

2 个答案:

答案 0 :(得分:2)

您使用的选项应该不带有timeoutuseCookies选项,我在上一个项目中使用了该选项,该会话需要持续至少一周的时间,请在Mozilla开发人员栏中打开“存储”标签并点击左侧的Cookie,您会看到Cookie部分,其中包含为您的网站注册的Cookie,在我的情况下是 http://www.kp2.local

enter image description here

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

enter image description here

,如果您注释掉代码然后注销,然后再次登录,它应该会像

一样显示Session上的到期时间

enter image description here

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

'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选项,如下图所示。

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

它将起作用。

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

答案 1 :(得分:1)

将会话保持如此长时间可能不是一个好主意-不活动的会话数据将消耗您的服务器资源,并可能减慢某些操作的速度。 Yii在此类情况下具有专用功能-您可以将$enableAutoLogin设置为true

'user' => [
    'enableAutoLogin' => true,
    // ...
],

login()上,身份Cookie的呼叫设置超时:

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

它将设置带有身份信息的特殊cookie(有效期为一年),该会话将在用户会话期满后自动登录。这样,您无需将会话数据保留在服务器上一年,但是从用户的角度看,他似乎始终在登录(即使在后台创建了新会话)。