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

Session Yii2从不注销空闲或离开用户,session,cookies,yii2,Session,Cookies,Yii2,如果用户关闭浏览器或空闲约一天(我不确定可能更少),Yii中的用户似乎会自动注销。是否有可能永远不注销它们(或者至少在一个月或一年的很长时间内)。不确定会话参数或Cookie参数是否需要更改 我试过改变参数 'components' => [ 'session'=>[ 'class' => 'yii\web\Session', 'cookieParams' => ['httponly' => true, 'lifetime'

如果用户关闭浏览器或空闲约一天(我不确定可能更少),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);

您使用的选项它应该在没有
timeout
useCookies
选项的情况下工作,我在上一个项目中使用了它,其中会话至少需要持续一周,打开Mozilla开发栏中的存储选项卡,单击左侧的cookies,您将看到cookies部分,其中包含为您的站点注册的cookies,在我的例子中,它是
http://www.kp2.local

如果您使用
'life'=>7*24*60*60,
它应该在1周后
Wed,2019年1月23日
显示cookie的有效期,如下所示

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

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

'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一次

它会起作用的


注意:您应该将
'lifeive'=>7*24*60*60,
中的
7
更改为您希望保持会话的天数

您使用的选项应该在没有
超时
使用cookies
选项的情况下工作,我在上一个项目中使用了它,其中会话至少需要持续一周,打开Mozilla开发栏中的存储选项卡并单击左侧的Cookie,您将看到Cookie部分,其中包含为您的站点注册的Cookie,在我的情况下,它是
http://www.kp2.local

如果您使用
'life'=>7*24*60*60,
它应该在1周后
Wed,2019年1月23日
显示cookie的有效期,如下所示

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

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

'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一次

它会起作用的


注意:您应该将
'life'=>7*24*60*60,
中的
7
更改为您希望保持会话的天数

保持会话这么长时间可能是个坏主意-非活动会话数据将消耗您的服务器资源,并可能会减慢某些操作。Yii为此类情况提供了专用功能-您可以设置为
true

'user' => [
    'enableAutoLogin' => true,
    // ...
],
并在
login()
上为标识cookie调用设置超时:

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

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

将会话保存这么长时间可能是个坏主意-非活动会话数据将消耗您的服务器资源,并可能会减慢某些操作。Yii为此类情况提供了专用功能-您可以设置为
true

'user' => [
    'enableAutoLogin' => true,
    // ...
],
并在
login()
上为标识cookie调用设置超时:

Yii::$app->user->login($user, 31536000);
它将设置带有身份信息的特殊cookie(有效期为一年),该cookie将在用户会话到期后自动登录。这样,您不需要将会话数据保存在服务器上一年,但从用户的角度看,他似乎总是在登录(即使在后台创建了新会话)