Yii2 延迟创建和删除会话:Android webView
我的网站使用了Yii2 延迟创建和删除会话:Android webView,yii2,android-webview,Yii2,Android Webview,我的网站使用了Yii2作为一个框架,在那里我使用了“Dektrium user”模块来实现注册和认证。在配置中,我将autologin属性设置为“true” 当我在我的网站上注册(通过webView打开)时,会话打开,我保持登录状态,一切正常,但当我关闭应用程序并再次打开它时-我看到登录表单,我需要再次输入注册数据。但是,如果我等待(大约30秒-1分钟),然后关闭应用程序-会话将被保存,并且我可以再次打开应用程序并使用,而无需输入我的登录名并通过 与注销相关的情况也一样:如果我单击“注销”,然后
Yii2
作为一个框架,在那里我使用了“Dektrium user”
模块来实现注册和认证。在配置中,我将autologin
属性设置为“true”
当我在我的网站上注册(通过webView
打开)时,会话打开,我保持登录状态,一切正常,但当我关闭应用程序并再次打开它时-我看到登录表单
,我需要再次输入注册数据。但是,如果我等待(大约30秒-1分钟),然后关闭应用程序-会话将被保存,并且我可以再次打开应用程序并使用,而无需输入我的登录名
并通过
与注销
相关的情况也一样:如果我单击“注销”
,然后很快关闭webView
应用程序,然后再次打开-我仍然登录
最奇怪的是,在iPhone
webView
中,一切都运行良好。当然,我试图通过浏览器重现这个bug,没有webView
——它们也都工作得很好
也许有人有一些想法,为什么webView
可以延迟“冻结”
会话?关于登录()
如果$enableSession
为真:
- 身份信息将存储在会话中,并在中可用
下一个请求
- 如果
$duration==0
:只要会话
保持活动状态或直到用户关闭浏览器
- 如果
$duration>0
:只要会话保持活动状态,还是只要会话保持活动状态?作为
cookie在以下情况下保持有效:$duration
,以秒为单位
$enableAutoLogin
已设置为true
您需要为Yii::$app->user->login()使用第二个参数
定义用户可以保持登录状态的秒数,默认为0
//keep the cookie duration valid for 120 seconds or 2 minutes
Yii::$app->user->login($user,120);
由于您已将$enableAutoLogin
设置为true
,因此不会忽略此参数,并且会使用默认值0
,并且在您关闭应用程序时会立即清除会话。有关更多详细信息,请参阅
对于Dektrium用户
您正在使用的值是在模块的LoginForm
模型中设置的,它使用rememberMe
属性
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 0);
默认为false
,并与登录表单上的复选框一起使用,以将此属性设置为true
/** @var string Whether to remember the user */
public $rememberMe = false;
因此,这意味着如果您没有使用登录表单上的rememberMe
复选框登录会话,那么一旦注销或窗口关闭,cookie将在0
秒内保持有效
您可以将else
零件值从0
设置为任何自定义值,如60
,持续1分钟
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 60);
或者(我不喜欢这部分)
您可以设置public$rememberMe=true默认情况下,代码>以便在未注销时始终通过两周的默认值进行记忆。
如果您不想要默认的记忆值(2周),也可以在配置的模块下的模块设置中配置自定义值
您正在使用dektrium user
您对LoginForm
中的Yii::$app->user->login()
使用的值是什么,因为它使用模块rememberFor
属性进行传递,如果设置,则默认值为2周。我刚刚删除了我在这里发布的一个答案。你能确认这些吗?穆罕默德,谢谢你这么全面的回复,但你描述了一些一般设置,比如“回忆者”=>3000。我已经实现了这个功能,它在所有流行的浏览器中都运行良好,不包括Android webView
。只在那里观察到虫子。
'components'=>[
'user'=>[
'rememberFor'=>3000,