如果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);
答案 0 :(得分:2)
您使用的选项应该不带有timeout
和useCookies
选项,我在上一个项目中使用了该选项,该会话需要持续至少一周的时间,请在Mozilla开发人员栏中打开“存储”标签并点击左侧的Cookie,您会看到Cookie部分,其中包含为您的网站注册的Cookie,在我的情况下是 http://www.kp2.local
如果您使用'lifetime' => 7 * 24 * 60 * 60,
,它应该显示具有 1周后的有效期的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
选项,如下图所示。
它将起作用。
注意:您应将7
中的'lifetime' => 7 * 24 * 60 * 60,
更改为要保留会话的天数
答案 1 :(得分:1)
将会话保持如此长时间可能不是一个好主意-不活动的会话数据将消耗您的服务器资源,并可能减慢某些操作的速度。 Yii在此类情况下具有专用功能-您可以将$enableAutoLogin
设置为true
:
'user' => [
'enableAutoLogin' => true,
// ...
],
在login()
上,身份Cookie的呼叫设置超时:
Yii::$app->user->login($user, 31536000);
它将设置带有身份信息的特殊cookie(有效期为一年),该会话将在用户会话期满后自动登录。这样,您无需将会话数据保留在服务器上一年,但是从用户的角度看,他似乎始终在登录(即使在后台创建了新会话)。